2011-02-04 84 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

相关问题