【问题标题】:ViewBinder creates random contentViewBinder 创建随机内容
【发布时间】:2012-05-27 20:18:11
【问题描述】:

我在 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

【问题讨论】:

    标签: android android-viewbinder


    【解决方案1】:

    这是因为视图回收。

    您需要创建一个对象来保存复选框的状态并在适配器中设置您的视图。

    我认为它不能在 viewbinder 中完成,因为没有将位置传递给它(但老实说我从未尝试过)..

    您可能必须在getView 中进行操作。

    这是我之前回答的链接,我在其中展示了如何使用 SimpleCursorAdapter 进行处理(它也可以修改为适用于 arrayadapter)。 SO Answer

    【讨论】:

    • 它适用于例如 textView 的文本。这意味着 ViewBinder 只转换了几个用例。这使得它非常弱
    • 没有必要。它正在处理数据源中的所有内容。您的复选框不是数据源的一部分。如果您将复选框状态放入您的数据源(我刚才为购物应用程序这样做了),那么它将从中读取/设置状态,您可以创建方法来切换支持适配器的数据中的复选框,这将然后通过viewbinder流回列表。不过大多数人不想这样做,所以他们添加了一个数组来保存他们想要使用的其他项目的状态,并改用getView
    • 数据源是什么意思,如何放入数据源?
    • 您的数据来自某个地方...一个数组或一个游标。那是您的数据源。如何添加它取决于您和您的实施。我通常使用数据库和游标,所以我在数据库中添加了一个字段来保存检查状态,并通过onClick 方法修改状态并将其保存到数据库中。我将它拉到我的光标中并使用它来设置复选框状态。
    • 我想我会这样做。我使用 SimpleAdapter,它从 List> getData(String prefix) funktion 获取数据,还有 CheckBox 信息。一切正常,直到滚动后某些元素再次可见。
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多