2012-05-27 79 views
0

我在ViewBinder中有奇怪的行为。所有在TextView上都很好用。使用CheckBoxes(在我的代码中删除)和自定义窗口小部件progressChart时,当我向下滚动和/或向上滚动时,值不会存储在列表的正确位置。一切似乎都很随意。但是TextView总是正确的。 这里是我的代码:ViewBinder创建随机内容

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

回答

1

这是因为视图回收。

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

我不认为它可以在viewbinder来完成,因为位置不是在传递给它(但说实话,我从来没有尝试过)..

你可能会不得不做的getView

这里是我的一个前面的答案的链接,我展示了如何使用SimpleCursorAdapter(它可以修改为适用于arrayadapter)。 SO Answer

+0

它使用例如textView的文本。这意味着ViewBinder只会收敛一些用例。这使它非常弱 – user1324936

+0

不是必需的。它正在处理数据源**中的所有内容**。您的复选框不是数据源的一部分。如果您将复选框状态置于您的数据源中(前段时间我为购物应用程序执行此操作),则它会从中读取/设置状态,您可以创建方法来切换支持适配器的数据中的复选框,然后通过查看器返回列表。大多数人不想这样做,所以他们添加一个数组来保存他们想要使用的额外项目的状态,并使用'getView'替代。 – Barak

+0

你是什么意思的数据源,我如何把它放入数据源? – user1324936