我正在处理具有自定义可扩展ListView的Fragment。选择ListView后,元素将添加到所选列表项中的两个LinearLayouts,并使这些布局可见。这些新元素中的每一个都是可选择的,并具有以下属性:
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-喝彩-ICS
Expanded,Sub-Element Clicked,List Item Clicked
正如您在4.0.4设备上看到的那样,当选择整个列表项时,所有子元素都会获得焦点突出显示,这是不合需要的。我该如何解决这个问题?
答案 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));