我想用我的ListView上点击的项目替换我的EditTexts。我使用光标移动ListView上的项目。但是,即使我单击其上的第二个项目,第一个项目也会显示出来。我做错了什么?
这是我的ListView onItemClicked代码:
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的第二行时会发生以下情况:
答案 0 :(得分:0)
我想用我的ListView上点击的项目替换我的EditTexts。
嗯,这是你应该做的而不是使用光标。您的列表视图已经填充了Cursor.
的数据,因此无需再次查询!
只需从行中onClickListener()
收到必要的信息。
您可以使用ViewHolder
模式。创建名为ViewHolder
的简单类,保留对您的名称,数量,描述字段的引用。然后在您的newView()
方法中创建新的ViewHolder,并使用setTag()
将其附加到您的视图中。
在bindview()
中绑定数据。然后,在OnClickListener
中getTag()
使用view
。
你可以在https://developer.android.com/training/improving-layouts/smooth-scrolling.html
看到很好的例子不要在UI线程中查询数据库!在OnClick方法中查询数据库是一个错误。如果您在阅读完文章后仍想查询数据库,请至少使用CursorLoader
或AsyncTask
。
答案 1 :(得分:-1)
以下代码可能正常工作..
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));