2011-07-19 31 views
0

我现在正在开发一个应用程序,该应用程序使用ListView和 CheckedTextView对由ArrayAdapter管理的每个项目支持多个选择。我的ListView中的内容是动态的,即 的含义,可以在运行时更改。现在我尝试使用 ListView.getCheckedItemPositions()来获取所有选中的项目,因为我想 保存所有选中的位置,并在用户再次返回到 时自动检查它们。所以我需要保存每个页面的检查结果。如何使用CheckedTextView访问ListView?

对于第一页,一切正常工作正常。但是当用户转到 另一页并进行一些选择时,ListView返回的结果数组包含一些从不检查的位置。我不明白为什么ListView具有这种奇怪的行为 。即使对于一个页面,实际上没有检查发生,但 ListView给我一个结果,表明有一个项目已被检查。

任何人都可以教我如何在OnClickListener回调中获得CheckedTextView 的位置?

示例代码非常感谢。

在此先感谢...

回答

3

ListView控件回收自己的观点,所以当你去到不同的页面,然后返回到上一个页面,列表视图召回其意见getView()函数。为确保选中的视图的顺序未混淆,请在初始化适配器之前创建一个包含所有视图的状态的数组列表。然后传递ArrayList作为适配器构造函数的参数。在getView()函数中,根据数组列表设置每个可检查textview的选中状态。然后,返回到活动类并重写onItemClick()事件。使用的是给你当函数被调用视图,请执行下列操作,以获得可检查的TextView并设置其选中状态:

listView1.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View selectedView, int position , long id) 
    { 
     CheckedTextView tv = (CheckedTextView)selectedView.findViewById(R.id.textview); 
     if (tv.isChecked()) 
     { 
      tv.setChecked(false); 
      checkStatesOfViews.get(position) = false; 
     } 
     else 
     { 
      tv.setChecked(true); 
      checkStatesOfViews.get(position) = true; 
     } 

} });

+0

如何使用CheckableTextView? – Selva

+0

查看[this](http://tokudu.com/2010/android-checkable-linear-layout/)了解如何使用CheckableTextView –