0

リストビューを手伝ってください。リストビューでアイテムをクリックすると、背景色を変更してクリックしたアイテムを強調表示したいのですが、リストアイテムをクリックすると、複数のアイテムの背景色が変更されます。すべてが発生するわけではありません。時間はランダムです。私はこのトピック、特に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;
    }
4

3 に答える 3

1

for ループが間違っています。以下のスナップショットを試してください。

    if(TempVar.SELECTEDLIST.contains(position))

         {
           vi.setBackgroundResource(R.drawable.gradient_bg_hover);
         }
    else
        {
            vi.setBackgroundResource(R.drawable.gradient_bg);
        }
于 2013-01-23T07:00:07.463 に答える
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);
                }
于 2013-01-23T06:56:04.013 に答える
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です。

于 2013-01-23T09:33:48.433 に答える