Android ViewBinder创建随机内容
我在活页夹里有奇怪的行为。所有这些都可以在文本视图上正常工作。使用复选框(在我的代码中删除)和自定义窗口小部件progressChart,当我再次向下和/或向上滚动时,值不会存储在列表的正确位置。一切似乎都很随机。但是文本视图总是正确的。 这是我的密码:Android ViewBinder创建随机内容,android,android-viewbinder,Android,Android Viewbinder,我在活页夹里有奇怪的行为。所有这些都可以在文本视图上正常工作。使用复选框(在我的代码中删除)和自定义窗口小部件progressChart,当我再次向下和/或向上滚动时,值不会存储在列表的正确位置。一切似乎都很随机。但是文本视图总是正确的。 这是我的密码: SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() { @Override public boolean se
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);
非常感谢您的帮助
我发现了一个类似的问题,但答案不符合我的代码。
这是因为视图回收 您需要创建一个对象来保存复选框的状态,并根据适配器中的状态设置视图 我不认为这可以在viewbinder中完成,因为该职位没有传递给它(但老实说,我从未尝试过) 您可能必须在
getView
中执行此操作
这里有一个链接,指向我之前的一个答案,我在这里展示了如何使用SimpleCorsorAdapter(它也可以修改为应用于arrayadapter) 例如,它使用textView的文本。这意味着ViewBinder只涉及少数用例。这使得它非常脆弱。它正在处理数据源中的所有内容。您的复选框不是数据源的一部分。如果您将复选框状态放入数据源(我刚才为一个购物应用程序这样做了),那么它将从中读取/设置状态,您可以创建方法在支持适配器的数据中切换复选框,然后通过viewbinder返回列表。但是大多数人不想这样做,所以他们添加了一个数组来保存他们想要使用的其他项目的状态,并使用
getView
来代替。数据源是什么意思?我如何将其放入数据源?您的数据来自某个地方。。。数组或光标。这是您的数据源。如何添加它取决于您和您的实现。我通常使用数据库和游标,因此我在数据库中添加了一个字段来保存checkstate,并使用onClick
方法修改状态并将其保存到数据库中。我把它拉到光标上,用它来设置复选框的状态。我保证我会这样做。我使用SimpleAdapter,它从List getData(字符串前缀)函数中获取数据,还获取复选框信息。在滚动后某些元素再次可见之前,一切正常。