我有一个ListView
,它是从SimpleCursorAdapter
填充的,每行包含3个不同的TextViews
。我只想用TextViews
(ViewBinder
)修改所有行的R.id.text65
之一,但是它会不断更新每行的所有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
。 最佳答案
解决方案1:
您应该检查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索引/无论数据源如何,列的索引。
解决方案2:
您可能正在定义
int[]
以便绑定到listview
中的字段,例如: // 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
而不是您不想绑定/显示的字段的布局ID。 int[] to = new int[] { 0, 0, R.id.Currency };
这样,将仅绑定“货币”字段。
另外,您之所以难以接近,是因为从技术上讲,您的contentView中没有单个
text65
,而是许多。您不能从主布局级别访问它。它仅在单行范围内是唯一的。更新:
解决方案3:
在
id
中检查视图的ViewBinder
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/