リストビューを手伝ってください。リストビューでアイテムをクリックすると、背景色を変更してクリックしたアイテムを強調表示したいのですが、リストアイテムをクリックすると、複数のアイテムの背景色が変更されます。すべてが発生するわけではありません。時間はランダムです。私はこのトピック、特にSOについて多くのことを研究しましたが、何もうまくいかないようです。
また、変更された色がタスク全体で持続するようにします。つまり、アクティビティを切り替えた後にアクティビティに戻った場合でも、選択したアイテムは強調表示されたままになります。
Onclickイベントの静的ArrayListSELECTEDLISTに位置を保存します。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;
}