Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从SimpleCursorAdapter的选定项中获取字符串?_Android_String_Cursor - Fatal编程技术网

Android 如何从SimpleCursorAdapter的选定项中获取字符串?

Android 如何从SimpleCursorAdapter的选定项中获取字符串?,android,string,cursor,Android,String,Cursor,在用户键入要搜索的输入字符串时,我使用AutoCompleteTextView从我的sqlite db中向用户建议一些单词 我试图通过使用简单的\u列表\u项目\u 2使建议看起来友好,以下是我的代码: package com.suit.kamus; import android.app.Activity; import android.database.Cursor; import android.database.MatrixCursor; import android.os.Bundle

在用户键入要搜索的输入字符串时,我使用AutoCompleteTextView从我的sqlite db中向用户建议一些单词

我试图通过使用简单的\u列表\u项目\u 2使建议看起来友好,以下是我的代码:

package com.suit.kamus;

import android.app.Activity;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class SuitAuto extends Activity implements TextWatcher{
AutoCompleteTextView auto; TextView result;
Button search; Button add; Spinner chooser;
String input; static String selection; String main;
String[] options = {"en to ina", "ina to en"};
SimpleCursorAdapter simple;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    auto = (AutoCompleteTextView)findViewById(R.id.auto);
    auto.addTextChangedListener(this);

    result = (TextView)findViewById(R.id.result);

    chooser = (Spinner)findViewById(R.id.chooser);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, options);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    chooser.setAdapter(adapter);

    KamusDbAdapter dbHelper = new KamusDbAdapter(getApplicationContext());
    dbHelper.open();
    String status = dbHelper.getstatedb();
    selection = status;
    dbHelper.close();

    if (selection.equalsIgnoreCase("en")){
        chooser.setSelection(0);
    } else {chooser.setSelection(1);}

    Log.d("statelang", selection);

    add = (Button)findViewById(R.id.add);
    add.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            startAdding(main);
        }

    });

    chooser.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            if (chooser.getSelectedItemId() == 0){
                selection = "en";
                select();
                updateDb();
            }else{
                selection = "ina";
                select();
                updateDb();
            }
        }

        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

    auto.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

            main = auto.getText().toString();
            //Log.v("CURSOR",finish);
            result.setText("");
            auto.setText("");
        }
    });


}

public void startAdding(String dWord) {
    // TODO Auto-generated method stub
    KamusDbAdapter adding = new KamusDbAdapter(getApplicationContext());
    adding.open();
    adding.Favorite(dWord);
    adding.close();
}

protected void updateDb() {
    // TODO Auto-generated method stub
    KamusDbAdapter save = new KamusDbAdapter(getApplicationContext());
    save.open();
    save.updatestatedb(selection);
    save.close();
}


public static String select() {
    // TODO Auto-generated method stub
    Log.v("STRING",selection);
    return selection;
}

@Override
public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub

}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
    // TODO Auto-generated method stub

}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    input = auto.getText().toString();

    KamusDbAdapter x = new KamusDbAdapter(getApplicationContext());
    x.open();
    Cursor cur = x.getCall(input, selection);
    //getCall is in KamusDbAdapter class, it used to return result cursor from sqlite db
    //i use rawQuery "SELECT * FROM en_to_ina WHERE word LIKE 'input%'"
    x.close();

    String[] displayFields = new String[] {"word", "meaning"};

    int[] displayViews = new int[] { android.R.id.text1,android.R.id.text2 };

    simple = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cur,displayFields, displayViews);

    auto.setAdapter(simple); 

}
}
package com.suit.kamus;
导入android.app.Activity;
导入android.database.Cursor;
导入android.database.MatrixCursor;
导入android.os.Bundle;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.util.Log;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.AutoCompleteTextView;
导入android.widget.Button;
导入android.widget.SimpleCursorAdapter;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.AdapterView.OnItemClickListener;
公共类SuitAuto扩展活动实现TextWatcher{
自动完成文本视图自动;文本视图结果;
按钮搜索;按钮添加;微调器选择器;
字符串输入;静态字符串选择;字符串主;
字符串[]选项={“en-to-ina”,“ina-to-en”};
简单或适应简单;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
auto=(AutoCompleteTextView)findviewbyd(R.id.auto);
auto.addTextChangedListener(此);
结果=(TextView)findViewById(R.id.result);
选择器=(微调器)findViewById(R.id.chooser);
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u微调器项目,选项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
选择器.setAdapter(适配器);
KamusDbAdapter dbHelper=新的KamusDbAdapter(getApplicationContext());
dbHelper.open();
String status=dbHelper.getstatedb();
选择=状态;
dbHelper.close();
if(selection.equalsIgnoreCase(“en”)){
选择器。设置选择(0);
}else{chooser.setSelection(1);}
Log.d(“statelang”,选择);
add=(按钮)findViewById(R.id.add);
add.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
开始(主要);
}
});
选择器.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
if(chooser.getSelectedItemId()==0){
选择=“en”;
选择();
updateDb();
}否则{
选择=“ina”;
选择();
updateDb();
}
}
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
auto.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
main=auto.getText().toString();
//Log.v(“光标”,完成);
result.setText(“”);
auto.setText(“”);
}
});
}
公共无效开始标记(字符串dWord){
//TODO自动生成的方法存根
KamusDbAdapter adding=新的KamusDbAdapter(getApplicationContext());
添加.open();
添加.Favorite(dWord);
添加.close();
}
受保护的void updateDb(){
//TODO自动生成的方法存根
KamusDbAdapter save=新的KamusDbAdapter(getApplicationContext());
save.open();
save.updatestatedb(选择);
save.close();
}
公共静态字符串select(){
//TODO自动生成的方法存根
Log.v(“字符串”,选择);
返回选择;
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、int arg3){
//TODO自动生成的方法存根
输入=auto.getText().toString();
KamusDbAdapter x=新的KamusDbAdapter(getApplicationContext());
x、 open();
光标cur=x.getCall(输入、选择);
//getCall位于KamusDbAdapter类中,用于从sqlite db返回结果游标
//我使用rawQuery“选择*从en_到a,其中的单词类似于'input%'”
x、 close();
字符串[]显示字段=新字符串[]{“单词”,“含义”};
int[]displayViews=newint[]{android.R.id.text1,android.R.id.text2};
simple=新的SimpleCursorAdapter(这个,android.R.layout.simple\u list\u item\u 2,cur,displayFields,displayview);
自动设置适配器(简单);
}
}
从单击的项检索字符串时遇到问题。它位于:

auto.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

            main = auto.getText().toString();
            //Log.v("CURSOR",finish);
            result.setText("");
            auto.setText("");
        }
    });
auto.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
main=auto.getText().toString();
//Log.v(“光标”,完成);
result.setText(“”);
auto.setText(“”);
}
});
我需要来自单词和含义字段的两个字符串。 任何回复都很好…

您需要使用


这似乎是2.1版的
SimpleCursorAdapter
的问题,2.2版的光标位于请求的项目上,您可以检索列数据,但在2.1版中,光标位置为0,而
cursor.move(itemIndex)
cursor.moveToFirst()
都返回false


我计划做一个RYO数据库适配器。

使用游标从SimpleCustomer适配器获取字符串

    @Override
public boolean onSuggestionClick(int position) {
    //First get cursor from your Adapter,
    Cursor cursor = (Cursor) mAdapter.getItem(position);
    /* Then get string data from cursor's column, I am getting it from column 0 in this case. You can use your own column index. */
    String s=cursor.getString(0);
    //Then set the searchview or autotextview with that string
    mSearchView.setQuery(s, true); //true will submit the query 
}

谢谢@Mojo Risin!我实现了如下代码
Curso
    @Override
public boolean onSuggestionClick(int position) {
    //First get cursor from your Adapter,
    Cursor cursor = (Cursor) mAdapter.getItem(position);
    /* Then get string data from cursor's column, I am getting it from column 0 in this case. You can use your own column index. */
    String s=cursor.getString(0);
    //Then set the searchview or autotextview with that string
    mSearchView.setQuery(s, true); //true will submit the query 
}