请帮我查看列表视图。当我点击列表视图中的项目时,我想通过更改背景颜色突出显示所单击的项目,但是单击列表项目背景颜色更改为多个项目。它不会t一直发生但是随机发生。我在这个主题上进行了很多研究,特别是在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;
}
答案 0 :(得分:1)
您的for循环错误,请尝试下面的快照:
if(TempVar.SELECTEDLIST.contains(position))
{
vi.setBackgroundResource(R.drawable.gradient_bg_hover);
}
else
{
vi.setBackgroundResource(R.drawable.gradient_bg);
}
答案 1 :(得分:0)
我不确定但如果有效,请尝试使用此代码:
for(int i = 0;i< yourSelectedList.length;i++){
if(Integer.toString(position).equals(selected)) {
selected = true;
}
}
if(selected){
vi.setBackgroundResource(R.drawable.gradient_bg_hover);
}
else
{
vi.setBackgroundResource(R.drawable.gradient_bg);
}
答案 2 :(得分:0)
在btnAddToOrder.setOnClickListener
方法的getView()
中,您正在使用
HashMap<String, String> map = new HashMap<String, String>();
map = data.get(position);
此处位置不是您点击的btnAddToOrder 的 ListViewItem的位置,它是新创建的 ListViewItem 的位置,可能是ListView中的最后一个或第一个可见项。
去获取你点击了btnAddToOrder的ListViewItem的正确位置,使用它:
final int actualPosition = yourListView.getPositionForView((View) v.getParent());
HashMap<String, String> map = new HashMap<String, String>();
map = data.get(actualPosition);
btnAddToOrder.setOnClickListener
中的。其中 v 是 btnAddToOrder 。