2015-04-19 2 views
1

Я реализовал CAB и MultiChoiceModeListener в ListView, и все работает отлично, за исключением изменения цвета фона элемента списка при выборе (множественный выбор). Вот мой код:Android ListItem селектор не работает с MultiChoiceModeListener

listView.xml:

<ListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="#ebebeb" 
    android:dividerHeight="1dip" 
    android:listSelector="@drawable/list_selector"/> 

list_selector:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:drawable="@android:color/holo_green_light"/> 
<item android:state_pressed="true" android:drawable="@android:color/holo_blue_light"/> 
<item android:state_focused="true" android:drawable="@android:color/holo_blue_dark"/> 
<item android:drawable="@android:color/white"/> 
</selector> 

Фрагмент:

l.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
l.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
     @Override 
     public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) { 
      int checkedCount = l.getCheckedItemCount(); 
      mode.setTitle(checkedCount + " Selected"); 
     } 

     @Override 
     public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) { 
      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) { 
     } 

     @Override 
     public void onDestroyActionMode(android.view.ActionMode mode) { 
     } 
    }); 
+0

В чем проблема? Работает ? –

+0

№ Изменение цвета фона при его выборе не работает. – Arnes

ответ

0

То, что я сделал, сохранение данных о деталях, чтобы увидеть если он был выбран, а затем просто вызывает адаптер notifyDataSetChanged, чтобы снова создать представление. В моем случае речь шла об изменении значка в списке элементов.

Это отношение MultiChoiceModeListener часть:

mylist.setMultiChoiceModeListener(new MultiChoiceModeListener() 
    { 

     private int numberOfSelected = 0; 

     @Override 
     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) 
     { 
      // Here you can do something when items are 
      // selected/de-selected, 
      // such as update the title in the CAB 
      if (checked) 
      { 
       numberOfSelected++; 
      } else 
      { 
       numberOfSelected--; 
      } 
      mode.setTitle(numberOfSelected + " items selected"); 
      itemsData.get(position).isChecked = checked; //a collection of data item's status 
      m_listAdapter.notifyDataSetChanged(); 
     } 
     ... 

И это то, что я сделал в адаптере:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 

     View vi = convertView; 
     if (vi == null) 
     { 
      vi = m_inflater.inflate(R.layout.item_view, null); 
     } 

     ImageView theIcon = (ImageView) vi.findViewById(R.id.icon); 
     if (dataItems.get(position).isChecked) 
     { 
      theIcon.setImageResource(R.drawable.icon1); 
     } else 
     { 
      contactIcon.setImageResource(R.drawable.icon2); 
     } 
     return vi; 
    } 

Так я просто построить элементы списка снова после выбора пункта.

Смежные вопросы