单击列表项时,ListView子元素背景更改

时间:2014-09-18 22:20:42

标签: android

我正在处理具有自定义可扩展ListView的Fragment。选择ListView后,元素将添加到所选列表项中的两个LinearLayouts,并使这些布局可见。这些新元素中的每一个都是可选择的,并具有以下属性:

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

我注意到在我的两个设备上处理这个后台选择器状态是不同的。我为这些设备附加了两组屏幕截图,以比较相同代码的处理。

Android 4.3.1 | CyanogenMod 10.2.1
ExpandedSub-Element ClickedList Item Clicked

Android 4.0.4 | 2.6.38.8-AOKP-喝彩-ICS
ExpandedSub-Element ClickedList Item Clicked

正如您在4.0.4设备上看到的那样,当选择整个列表项时,所有子元素都会获得焦点突出显示,这是不合需要的。我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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

    }
}

答案 1 :(得分:0)

您看到的颜色是由于列表视图的listSelector属性。将在列表项上呈现哪种效果的行为取决于Android版本和您用于应用程序的主题。要解决此问题,请将listSelector设置为透明或提供自己的选择器。您可以在xml中设置listSelector,也可以使用其中任何一个以编程方式设置。设置透明色

android:listSelector="#00000000"

yourListView.setSelector(new ColorDrawable(0x0));