2014-09-18 2 views
0

Я работаю над фрагментом, который имеет настраиваемый расширяемый ListView. Когда выбран ListView, элементы добавляются к двум LinearLayouts в выбранном элементе списка, и эти макеты становятся видимыми. Каждый из этих новых элементов могут быть выбран и обладает следующими свойствами:Изменения в элементе подменю ListView при нажатии элемента списка

android:clickable="true" 
android:background="?android:attr/selectableItemBackground" 

Я заметил, что обработка этого состояния селекторного фона отличается от моих двух устройств. Я добавил два набора скриншотов для этих устройств, чтобы сравнить обработку одного и того же кода.

Android 4.3.1 | CyanogenMod 10.2.1
Expanded, Sub-Element Clicked, List Item Clicked

Android 4.0.4 | 2.6.38.8-AOKP-браво-ектронное
Expanded, Sub-Element Clicked, List Item Clicked

Как вы можете видеть на 4.0.4 устройстве, когда весь элемент списка выбран все суб-элементы получают фокус блик, а также которые нежелательно. Как мне обойти это?

ответ

0

Я устал иметь дело с несоответствиями (или, может быть, я никогда не учился), и сделал следующее, что может быть или не быть правильным или соответствовать вашему сценарию (относиться к коду ниже, как к псевдо-коду, чем к Java).

class SomeAdapter extends BaseAdapter { 
    final int colorItemDefault; 
    final int colorItemSelected; 
    final int colorSubItemDefault; 
    final int colorSubItemSelected; 

    public SomeAdapter (final Context c) { 
     final Resources res = c.getResources(); 
     colorItemDefault = res.getColor (R.color.item_default); 
     colorItemSelected = res.getColor (R.color.item_selected); 
     colorSubItemDefault = res.getColor (R.color.sub_item_default); 
     colorSubItemSelected = res.getColor (R.color.sub_item_selected); 
    } 

    public View getView (final int position, final View convertView, final ViewGroup parent...) { 
      final View view = makeNewViewOrRecycleExisting (...); 
      final Item item = getItem (position); 
      // bind content, etc... 

      view.setBackgroundColor (isSelected (item) ? colorItemSelected : colorItemDefault); 

      // similar logic for the sub items 

    } 
} 
0

Цвет, который вы видите, из-за списка свойств списка. Поведение какого эффекта будет отображаться в элементах списка, зависит от версии Android и темы, которую вы использовали для приложения. Чтобы обойти проблему, вы устанавливаете прозрачность спискаSelector или предоставляете свой собственный селектор. Вы можете установить listSelector в xml или программно, используя любой из них. Наборы прозрачного цвета

android:listSelector="#00000000" 

yourListView.setSelector(new ColorDrawable(0x0)); 
Смежные вопросы