我在ViewBinder中有奇怪的行为。一切都适用于TextViews。使用CheckBoxes(在我的代码中删除)和自定义小部件progressChart,当我向下和/或向上滚动时,值不会存储在List的右侧位置。一切似乎都很随机。但TextViews总是正确的。 这是我的代码:
SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Object data,
String textRepresentation) {
if (view.getId() == R.id.progress) {
ProgressChart progressChart = (ProgressChart) view;
progressChart.setVisibility(ImageButton.GONE);
} else {
if (x.substring(0, 1).equals("1")) {
int theProgress = Integer.parseInt(x.substring(1));
progressChart.setProgressDarkRed(theProgress);
}
}
if (view.getId() == R.id.textView1) {
TextView textView = (TextView) view;
textView.setText((String) data);
}
return true;
}
};
simpleAdapter.setViewBinder(viewBinder);
setListAdapter(simpleAdapter);
非常感谢任何帮助
我发现了类似的问题,但答案不适合我的代码。 Problems with the ViewBinder
答案 0 :(得分:1)
这是因为视图回收。
您需要创建一个对象来保存复选框的状态,并根据适配器中的视图设置视图。
我不认为它可以在viewbinder中完成,因为这个位置没有被传递给它(但说实话我从来没有尝试过)..
您可能必须在getView
中执行此操作。
以下是我之前的答案的链接,其中我展示了如何使用SimpleCursorAdapter(它也可以修改为适用于arrayadapter)。 SO Answer