Итак, у меня есть ListView
(используя ListActivity
), который я заполняю из SQLiteDatabase
. Я пытаюсь прикрепить идентификатор (PK) строки к представлению, чтобы onListItemClick
каждого элемента списка я мог что-то делать с этим идентификатором.
Я читал, что произвольные данные могут быть установлены в 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"
, поэтому, очевидно, идентификатор не устанавливается в ViewBinder
вызове setTag
(или не извлекается свойство с getTag
).