2011-02-04 70 views
1

我有一個ListView,點擊某個項目後,我希望它被永久選中,因此可以根據按下哪個按鈕來執行一些其他操作。有點像RadioBox,但在列表視圖中。所以當按下時,背景會保持黃色,我會保存一個選擇了哪個項目的商店。目前,當它被點擊的時候,背景會發生變化,但是在選中時會產生奇怪的行爲,並且我滾動ListView所選項目發生變化。已選擇的項目ListView背景更改

代碼,我有:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
     for (int i = 0; i < titles.size(); i++){ 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("name", titles.get(i)); 
      mylist.add(map); 
     } 

     SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listcell, 
       new String[] {"name"}, new int[] {R.id.txtItemName}); 

     ListView listView1 = (ListView) findViewById(R.id.ListView01); 
     listView1.setAdapter(mSchedule); 
     listView1.setTextFilterEnabled(true); 
     listView1.setOnItemClickListener(new OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
         Log.v("Test", v.toString()); 
         v.setBackgroundResource(R.drawable.newbackground); 
        } 
       }); 
} 

回答

0

在ListView的觀點得到回收,所以如果所選擇的視熄滅它可能被重新用於當前可見項目的一個畫面。這可能是你描述的怪異行爲?如果您想根據項目選擇執行多個潛在操作,通常可以通過長按+顯示上下文菜單完成。

什麼是奇怪的行爲?

+0

聽起來你是對的,我會滾動,然後回到我所在的位置,這將是一個不同的項目選擇。它不是真正的長按,它需要點擊,背景改變,然後我可以刪除或開始一個新的意圖取決於下一個按鈕按下。 – SamRowley 2011-02-04 13:59:11

0

跟蹤HashSet中的選定項目。覆蓋SimpleAdapter.getView()方法以基於selectedItems HashSet分配背景資源。

final HashSet<String> selectedItems = new HashSet<String>(); 
    SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listcell,new String[] {"name"}, new int[] {R.id.txtItemName}) { 
     @Override 
     public View getView(int position, View v, ViewGroup parent) { 
      if(v!= null) { 
       String title = titles.get((int)this.getItemId(position)); 
       if(selectedItems.contains(title)) { 
        v.setBackgroundResource(R.drawable.newbackground); 
       } else { 
        v.setBackgroundResource(0); 
       } 
      } 
      return super.getView(position, v, parent); 
     } 
    }; 
    ListView listView1 = (ListView)findViewById(R.id.listView1);   
    listView1.setAdapter(mSchedule); 
    listView1.setTextFilterEnabled(true);   
    listView1.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) {  
      String title = titles.get((int)id); 
      if(selectedItems.contains(title)) { 
       v.setBackgroundResource(0); 
       selectedItems.remove(title); 

      } else { 
       v.setBackgroundResource(R.drawable.newbackground); 
       selectedItems.add(title); 
      }     
     } 

    });   
+0

嘿謝謝你的回答,我沒有真正關注。我正要將我的代碼添加到問題中,能否告訴我您的答案可能與我的問題有關? – SamRowley 2011-02-04 14:36:13