我有一个ListView,点击一个项目后,我希望它被永久选中,因此可以采取其他一些操作,具体取决于下一步按下的按钮。有点像RadioBox但在列表视图中。因此,当按下时,背景保持黄色,我保留选择项目的存储。目前我点击它时,背景发生了变化,但是当选中时会产生奇怪的行为,我滚动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 :(得分:0)
ListView中的视图会被回收,因此如果所选视图离开屏幕,它可能会被重新用于当前可见项目之一。那可能是你描述的奇怪行为?如果您想根据项目选择进行多项潜在操作,通常可以通过长按+显示上下文菜单来完成。
奇怪的行为是什么?
答案 1 :(得分: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);
}
}
});