gpt4 book ai didi

android - ViewBinder 只修改所有 ListView 行中的一项

转载 作者:行者123 更新时间:2023-11-29 02:07:05 26 4
gpt4 key购买 nike

我有一个 ListView,它由 SimpleCursorAdapter 填充,每行包含 3 个不同的 TextViews。我只想用 ViewBinder (R.id.text65) 修改所有行的 TextViews 之一,但它会不断更新所有 3每行的 TextViews。这是我的代码:

cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);

return true;
}
});

附言我尝试了 (TextView) findViewById(R.id.text65);​​ 并得到了一个 Force close

最佳答案

解决方案一:

您应该检查viewbinder 中的列索引:

       public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (columnIndex == cursor.getColumnIndexOrThrow(**??**)) // 0 , 1 , 2 ??
{
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);

return true;
}
return false;
}

请注意,列索引是货币的 DBcolumn 索引/您的数据源中列的索引。

解决方案二:

例如,您可能正在为要绑定(bind)到 listview 中的字段定义 int[] :

            // and an array of the fields we want to bind those fields to
int[] to = new int[] { R.id.field1, R.id.field2, R.id.Currency };

SimpleCursorAdapter entries = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);

...有条件地,您可以简单地传递 0 而不是您不想绑定(bind)/显示的字段的布局 ID。

            int[] to = new int[] { 0, 0, R.id.Currency };

这样只会绑定(bind)货币字段。


此外,您获得强制关闭的原因是,从技术上讲,contentView< 中没有单个 text65/em> 但很多。您无法从主布局级别访问它。它仅在单个行的范围内是唯一的。


更新:

解决方案 3:

检查 ViewBinder 中 View 的 id

    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
Log.v("ViewBinder", "columnIndex=" + columnIndex + " viewId = " + viewId);
if(viewId == R.id.text65)
{
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);

return true;
}
return false;
}

你能试试这个吗?

有用的提示:您可以使用 Log.v 检查代码中的某些值,而无需调试它。

希望对您有所帮助。

关于android - ViewBinder 只修改所有 ListView 行中的一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388283/

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