2011-02-04 19 views
1

アイテムをクリックした後に永続的に選択したいListViewがあるので、次に押されるボタンに応じて他のアクションをとることができます。 RadioBoxのようなビットですが、リストビュー内です。だから、押されると、背景は黄色のままで、アイテムが選択されたストアを保持します。現時点では、背景を変更したときにクリックすると選択されたときに奇妙な動作が発生し、選択した項目が変更されたListViewがスクロールされます。私が持っている選択したアイテム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

あなたはそうであるように聞こえますが、私はスクロールして元の場所に戻り、別のアイテムを選択します。それは本当に長いプレスかもしれませんが、それはクリックする必要があります、背景が変更され、私は削除するか、次のボタンを押すに応じて新しいインテントを開始することができます。 – SamRowley

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); 
      }     
     } 

    });   
+0

お返事ありがとうございます、私は本当に続きません。私は質問に自分のコードを追加しようとしていますが、あなたの答えが私の問題にどのように関連するか教えてください。 – SamRowley

+0

Androidはビューをリサイクルしています。あなたの場合は、SimpleAdapterを拡張し、ビューの背景色を設定するsetViewText()とsetViewImage()の実装を提供したいと考えています。 –

関連する問題