Android ViewBinder创建随机内容

Android ViewBinder创建随机内容,android,android-viewbinder,Android,Android Viewbinder,我在活页夹里有奇怪的行为。所有这些都可以在文本视图上正常工作。使用复选框(在我的代码中删除)和自定义窗口小部件progressChart,当我再次向下和/或向上滚动时,值不会存储在列表的正确位置。一切似乎都很随机。但是文本视图总是正确的。 这是我的密码: SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() { @Override public boolean se

我在活页夹里有奇怪的行为。所有这些都可以在文本视图上正常工作。使用复选框(在我的代码中删除)和自定义窗口小部件progressChart,当我再次向下和/或向上滚动时,值不会存储在列表的正确位置。一切似乎都很随机。但是文本视图总是正确的。 这是我的密码:

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(字符串前缀)函数中获取数据,还获取复选框信息。在滚动后某些元素再次可见之前,一切正常。