2013-05-10 22 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 
       } 
      } 
     }); 
    } 
}