2013-05-10 21 views
3

我有一个使用一个ListView:setChoiceMode(ListView.CHOICE_MODE_SINGLE)如何取消选择?

setChoiceMode(ListView.CHOICE_MODE_SINGLE) 

因此,当用户点击所选择它会显示一个列表项。这工作正常,并自动选择该项目。

注意:用户单击列表项目时的标准操作是更新另一个片段中的某些内容。

但是列表中有一些我不想选择的列表项。我没有更新内容,而是显示一个对话框。麻烦的是,当用户摆脱对话框时,该项目仍然被标记为选中,我不想要。事实上,我不希望它被选中,并保持先前​​选择的列表项被选中。

有没有什么办法以编程方式选择一个列表项目(这样您可以选择是否将其设置为选中状态),同时使用CHOICE_MODE_SINGLE,因为这样可以确保当前只选择列表中的1个项目?

+0

所以你是说你要在列表中选择一个项目,然后点击另一个项目列表并且不更改选择哪个项目? – Eluvatar 2013-05-10 14:08:56

回答

6

看看这段代码:

mListView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
     if (position == 0) { 
      mListView.setItemChecked(position, false); 
     } 
    } 
}); 

它取消选中列表项,如果选择了第一项。您还可以保存最后正确的位置

mListView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
     if (position == 0) { 
      mListView.setItemChecked(mLastCorrectPosition, true); 
     } 
     else { 
      mLastCorrectPosition = position; 
     } 
    } 
}); 

编辑

全部活动

public class MainActivity extends Activity { 

    private ListView mListView; 
    private String[] mData = new String[] { "xxx", "yyy", "zzz", "aaa" }; 
    private BaseAdapter mAdapter; 
    private int mLastCorrectPosition = -1; 
    private int mButtonPosition = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mListView = (ListView) findViewById(R.id.list_view); 
     mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

     mAdapter = new ArrayAdapter<String>(this, 
         android.R.layout.simple_list_item_activated_1, mData); 
     mListView.setAdapter(mAdapter); 
     mListView.setSelector(new ColorDrawable(0)); 

     mListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
       if (position == mButtonPosition) { 
        if (mLastCorrectPosition != -1) { 
         mListView.setItemChecked(mLastCorrectPosition, true); 
        } 
        else { 
         mListView.setItemChecked(mButtonPosition, false); 
        } 
        // here show dialog 
       } 
       else { 
        mLastCorrectPosition = position; 
        // here refresh fragment 
       } 
      } 
     }); 
    } 
}