Java 为什么我的光标不能在我的ListView中工作?
我想用在我的ListView上单击的项目替换我的EditText。我使用光标在ListView上沿项目移动。但是,即使我单击第二项,第一项也会显示出来。我做错了什么 以下是我的ListView代码:Java 为什么我的光标不能在我的ListView中工作?,java,android,listview,android-listview,cursor,Java,Android,Listview,Android Listview,Cursor,我想用在我的ListView上单击的项目替换我的EditText。我使用光标在ListView上沿项目移动。但是,即使我单击第二项,第一项也会显示出来。我做错了什么 以下是我的ListView代码: lv_people_info.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterVie
lv_people_info.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
people_info2 = new ArrayList<String>();
Cursor cursor2 = db.query(PeopleEntry.TABLE_NAME,// Table
allColumns, // The columns to return
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
null, // The sort order
null); // Limits the number of rows returned by the query
cursor2.moveToFirst();
while (!cursor2.isAfterLast()) {
people_info2.add(cursor2.getString(1));
people_info2.add(cursor2.getString(2));
people_info2.add(cursor2.getString(3));
et_name.setText(people_info2.get(0));
et_amount.setText(people_info2.get(1));
et_description.setText(people_info2.get(2));
cursor2.moveToNext();
}
cursor2.close();
}
});
以下是单击ListView的第二行时发生的情况:
下面的代码可以正常工作
Inside Listview clickevent
private SQLiteDatabase myDataBase=myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
String sql=select name,amount,description from yourTableName
Cursor cr = myDataBase.rawQuery(sql, null);
现在你加在这里
people_info2.add(cr .getString(1));
people_info2.add(cr .getString(2));
people_info2.add(cr .getString(3));
et_name.setText(people_info2.get(0));
et_amount.setText(people_info2.get(1));
et_description.setText(people_info2.get(2));
我想用在我的ListView上单击的项目替换我的EditText
这就是你应该做的,而不是使用光标。您的listview已经填充了来自游标的数据。所以真的没有必要再查询它了
只需在onClickListener中从行接收必要的信息
您可以使用ViewHolder图案。创建名为ViewHolder的简单类,保留对名称、金额和描述字段的引用。然后在newView方法中创建新的ViewHolder,并使用setTag将其附加到视图中
在bindview中,将数据绑定到它。然后,在OnClickListener中使用getTag from view
你可以在这里看到一个很好的例子
不要在UI线程中查询数据库!用OnClick方法查询数据库是一个错误。如果在阅读本文之后,您仍然希望查询数据库,至少使用CursorLoader或AsyncTask。此代码应始终在任何行之后显示表中的最后一项click@Selvin实际上是第一个。视图设置为从数组开始的内容。是的,你是对的。。。关键是不需要使用int-position,即传递给onItemClick callbackUse的long-id来将主键绑定到ListView行。在您的ItemClickListener中,使用getTag并使用该id查询数据库。@KNeerajLal。。。为何不需要get/setTag答案是错误的问题,但是:获得增益。。。这甚至不会编译,因为文字不在aphostropes中。。。同样,这样的db.rawQuery与db.query相同,那么为什么它会有帮助呢?cr和.getString之间也有空格。在这个回答中,零努力被称为十亿猴子编程风格。没有必要使用OnClickListener,因为他使用的是ListView而不是RecyclerView。。。并且视图持有者应该只保留对DUM的引用!!!行中的视图,而不是数据。。。我想用在我的ListView上单击的项目替换我的EditText。prolly的意思是:我想将所选行中的数据绑定到EditTextsHi@RexSplode中,很抱歉,我对这一点非常陌生。因此,在创建ViewHolder类之后,如何将在ListView上单击的数据附加到ViewHolder?数据将附加到bindview方法中的行。在onClick中,只需调用getTag来接收ViewHolder实例。之后,您可以调用viewHolder.textView.getText来接收单击行中名称textView的文本。然后,editText.SetTextRetrieveString;