gpt4 book ai didi

android - SimpleCursorAdapter 和 ViewBinder - 将数据绑定(bind)到要在单击时检索的 ListView 项目

转载 作者:太空狗 更新时间:2023-10-29 13:38:30 24 4
gpt4 key购买 nike

所以我有一个 ListView(使用 ListActivity),我从 SQLiteDatabase 填充它。我正在尝试将行的 ID (PK) 附加到 View ,以便每个列表项的 onListItemClick,我可以使用该 ID 执行操作。

我读过可以使用 setTag 将任意数据设置到 View 并使用 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未在对 setTagViewBinder 调用中设置(或者未使用 getTag 检索属性)。

最佳答案

这取决于您对 R.layout.favorite 的实现。如果此布局包含一个带有子 TextView 的父 View ,例如您设置的标签是针对 TextView 的,而从 onListItemClick() 收到的 View v 是父 View 。您需要确保收到您设置的同一 View 的标签:

    @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();
}

关于android - SimpleCursorAdapter 和 ViewBinder - 将数据绑定(bind)到要在单击时检索的 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com