【发布时间】:2013-01-06 14:02:11
【问题描述】:
请帮助我使用列表视图。当我单击列表视图中的一个项目时,我想通过更改背景颜色来突出显示单击的项目,但是单击列表项目的背景颜色会更改多个项目。它没有不会一直发生,而是随机发生。我对这个主题进行了很多研究,尤其是 SO,但似乎没有什么对我有用。
而且我还希望更改后的颜色在整个任务中保持不变。即,即使我在活动之间切换后返回活动,所选项目也应保持突出显示。
我在 Onclick 事件中将位置保存到静态 ArrayList SELECTEDLIST。 在 GetView 方法中,我检查位置是否包含在 SELECTEDLIST 中,并相应地更改背景。
for(String selected:TempVar.SELECTEDLIST){
if(Integer.toString(position).equals(selected))
{
vi.setBackgroundResource(R.drawable.gradient_bg_hover);
}
else
{
vi.setBackgroundResource(R.drawable.gradient_bg);
}
}
如果我重新加载活动,只有最后一个选定的项目改变了背景颜色。但是 ArrayList Selected List 包含所有选定的 listitem 位置。我有什么遗漏吗??
编辑
public View getView(final int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.menu_single_item, null);
final TextView textID=(TextView)vi.findViewById(R.id.menu_single_item_id);
final TextView textName=(TextView)vi.findViewById(R.id.menu_item_name);
ImageView image=(ImageView)vi.findViewById(R.id.imageMenuItem);
ImageButton btnAddToOrder =(ImageButton)vi.findViewById(R.id.imgBtnOrder);
HashMap<String, String> MenuItem = new HashMap<String, String>();
MenuItem= data.get(position);
if(!TempVar.SELECTEDLIST.isEmpty())
{
for(String selected:TempVar.SELECTEDLIST){
if(Integer.toString(position).equals(selected))
{
vi.setBackgroundResource(R.drawable.gradient_bg_hover);
}
else
{
vi.setBackgroundResource(R.drawable.gradient_bg);
}
}
}
textID.setText(MenuItem.get(DBFunctions.TAG_MENU_ITEM_CODE));
textName.setText((MenuItem.get(DBFunctions.TAG_MENU_ITEM_NAME)).toUpperCase(Locale.getDefault()));
imageLoader.DisplayImage(MenuItem.get(DBFunctions.TAG_MENU_ITEM_IMAGE_PATH),image);
btnAddToOrder.setOnClickListener(new View.OnClickListener()
{ @Override
public void onClick(View v)
{
String qty = textQty.getText().toString();
HashMap<String, String> map = new HashMap<String, String>();
map=data.get(position);
TempVar.SELECTEDLIST.add(Integer.toString(position));
HashMap<String, String> order = new HashMap<String, String>();
order.put(DBFunctions.TAG_MENU_ITEM_CODE,map.get(DBFunctions.TAG_MENU_ITEM_CODE));
order.put(DBFunctions.TAG_MENU_ITEM_NAME,map.get(DBFunctions.TAG_MENU_ITEM_NAME));
TempVar.ORDERARRAYLIST.add(order);
RelativeLayout parent =(RelativeLayout) v.getParent().getParent();
parent.setBackgroundResource(R.drawable.gradient_bg_hover);
}
});
return vi;
}
【问题讨论】:
-
你在清理你选择的列表吗???
-
我在任务结束时清除它并在登录时再次初始化它
-
能否添加
getView和onItemClickListener代码 -
你添加 notifydatasetchanged 了吗?
-
@sreekanth 我在哪里调用 notifydatasetchanged onclick??
标签: android listview colors background selection