我的问题是当我从列表中手动选择它时,它会正确显示定义。但是,当我键入它并搜索定义时,它总是显示我的列表的第一项。我目前通过浏览教程学习android并遇到了这个例子,但无法解决这个问题。这是我的代码:
public class DbBackend extends DbObject{
public DbBackend(Context context) {
super(context);
}
public String[] dictionaryWords(){
String query = "Select * from dictionary";
Cursor cursor = this.getDbConnection().rawQuery(query, null);
ArrayList<String> wordTerms = new ArrayList<String>();
if(cursor.moveToFirst()){
do{
String word = cursor.getString(cursor.getColumnIndexOrThrow("word"));
wordTerms.add(word);
}while(cursor.moveToNext());
}
cursor.close();
String[] dictionaryWords = new String[wordTerms.size()];
dictionaryWords = wordTerms.toArray(dictionaryWords);
return dictionaryWords;
}
//
// public int getIndexByValue(String value){
// S
// }
public QuizObject getQuizById(int quizId){
QuizObject quizObject = null;
String query = "select * from dictionary where _id = " + quizId;
Cursor cursor = this.getDbConnection().rawQuery(query, null);
if(cursor.moveToFirst()){
do{
String word = cursor.getString(cursor.getColumnIndexOrThrow("word"));
String meaning = cursor.getString(cursor.getColumnIndexOrThrow("meaning"));
quizObject = new QuizObject(word, meaning);
}while(cursor.moveToNext());
}
cursor.close();
return quizObject;
}
}
这是字典活动
public class DictionaryActivity extends ActionBarActivity {
private TextView wordMeaning;
private TextToSpeech convertToSpeech;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dictionary);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
int dictionaryId = bundle.getInt("DICTIONARY_ID");
int id = dictionaryId + 1;
TextView word = (TextView)findViewById(R.id.word);
wordMeaning = (TextView)findViewById(R.id.dictionary);
Button textToSpeech = (Button)findViewById(R.id.button);
DbBackend dbBackend = new DbBackend(DictionaryActivity.this);
QuizObject allQuizQuestions = dbBackend.getQuizById(id);
word.setText(allQuizQuestions.getWord());
wordMeaning.setText(allQuizQuestions.getDefinition());
}
另一个班级
public class MainActivity extends ActionBarActivity {
private EditText filterText;
private ArrayAdapter<String> listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
filterText = (EditText)findViewById(R.id.editText);
ListView itemList = (ListView)findViewById(R.id.listView);
DbBackend dbBackend = new DbBackend(MainActivity.this);
String[] terms = dbBackend.dictionaryWords();
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, terms);
itemList.setAdapter(listAdapter);
itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// make Toast when click
Toast.makeText(getApplicationContext(), "Position " + position, Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this, DictionaryActivity.class);
intent.putExtra("DICTIONARY_ID", id);
startActivity(intent);
}
});
答案 0 :(得分:2)
在这部分尝试获取不是id的单词
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// make Toast when click
Toast.makeText(getApplicationContext(), "Position " + position, Toast.LENGTH_LONG).show();
String selectedText = (String) parent.getItemAtPosition(position);
Intent intent = new Intent(MainActivity.this, DictionaryActivity.class);
intent.putExtra("DICTIONARY_ID", selectedText);
startActivity(intent);
}
和查询
String query = "select * from dictionary where _id = " + quizId;
替换为
String query = "select * from dictionary where word = '" + quizId + "';
记住quizId现在是你名单中的单词,