所以我有一个ListView
(使用ListActivity
)从SQLiteDatabase
填充。我正试图将行的id(pk)附加到视图中,这样每个列表项的onListItemClick
都可以使用该id进行操作。
我已经读过,使用View
可以将任意数据设置为setTag
,并使用getTag
检索(实际上我还没有成功完成这项工作,所以这可能是问题所在)。以下是我正在使用的精简版本(为了简单/简洁):
public class Favorites extends ListActivity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FavoritesDB db = FavoritesDB.getInstance(this);
Cursor c = db.fetchFavorites();
startManagingCursor(c);
String[] columns = new String[] { "_id" };
int[] to = new int[] { R.id.word };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.favorite, c, columns, to);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
view.setTag(cursor.getInt(0));
return true;
}
});
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Object wordID = v.getTag();
Toast.makeText(getBaseContext(), "ID=" + wordID, 1).show();
}
}
ListView
正在被填充,Toast
确实会出现,但它总是"ID=null"
,因此很显然,id没有在对ViewBinder
的setTag
调用中设置(或者没有用getTag
检索属性)。 最佳答案
这取决于R.layout.favorite
的实现。如果此布局包含父视图和子文本视图,例如,您设置的标记是文本视图,而从onListItemClick()
接收的视图v是父视图。您需要确保收到通过使用以下命令设置的同一视图的标记:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Object wordID = v.getChild(0).getTag();
Toast.makeText(getBaseContext(), "ID=" + wordID, 1).show();
}