У меня есть список, и в макете строки есть дочерний элемент с фоном, установленным для следующего селектора:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/pressed_panel" />
<corners android:radius="@dimen/rounded_panel_corners" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
<corners android:radius="@dimen/rounded_panel_corners" />
</shape>
</item>
And now this scenario happens:
- Я создаю экземпляр адаптера и устанавливаю его в список с базовым списком, скажем, моделью A (внутри ListFragment)
- Я нажимаю на первый ряд (это происходит и для другого ряда), и только при нажатии селектор остается в нажатом состоянии, показывая какой-то серый цвет, да!
- Я выбираю из меню какой-то элемент, и это вызывает: создание нового экземпляра адаптера с моделью списка B и применение его к списку.
- А теперь проблема: в первой строке селектор находится в нажатом состоянии
Дополнительная информация: @Вопросы, поднятые Абхишеком В. в комментарии: 1. Фон установлен на дочерний элемент макета строки, а не на сам макет строки, верно? Правильно! Вот макет, селектор установлен на относительный с идентификатором "container_conversation"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical">
<CheckBox
android:id="@+id/checkbox_select_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="18dp"
android:button="@drawable/checkbox_round_selector"
android:focusable="false"
android:clickable="true"
android:padding="8dp"/>
<FrameLayout
android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical"
>
<RelativeLayout
android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="82dp"
android:layout_gravity="right"
android:layout_marginBottom="4dp"
android:layout_marginRight="9dp"
android:layout_marginTop="4dp">
<SomeViews>
</RelativeLayout>
<FrameLayout
android:id="@+id/front"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="visible"
tools:visibility="visible">
<RelativeLayout
android:id="@+id/container_conversation"
android:layout_width="match_parent"
android:layout_height="82dp"
android:layout_marginBottom="4dp"
android:layout_marginLeft="9dp"
android:layout_marginRight="9dp"
android:layout_marginTop="4dp"
android:background="@drawable/white_rounded_panel">
<SomeViews>
</RelativeLayout>
<View
android:id="@+id/unread_indicator"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:background="@drawable/orange_circle"
android:visibility="gone"
tools:visibility="visible" />
</FrameLayout>
</FrameLayout>
2) Click/touch listener is set to row layout or it's child? Child 3) Which listener you are using, is it onClick, onTouch or onItemClick? The listview is actually copied from the library android-swipelistview https://github.com/47deg/android-swipelistview . The click that does the damage is set as follows:
frontView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
swipeListView.onClickFrontView(downPosition);
}
});
и этот щелчок уведомляет этого слушателя
BaseSwipeListViewListener swipeListener = new BaseSwipeListViewListener() {
@Override
public void onClickFrontView(int position) {
}//...
Спасибо!
Adapter
иXML Selector
, может быть, мы что-нибудь поймаем - person hrskrs   schedule 25.02.2015setPressed(false)
. Если он перерабатывает представления в списке, одно из них могло не получить эквивалентmouseUp
до того, как оно потеряло фокус. - person Chris Handy   schedule 25.02.2015child
, а не на сам макет строки, верно? 2) Прослушиватель кликов/прикосновений настроен на макет строки или дочерний? 3) Какой слушатель вы используете, этоonClick
,onTouch
илиonItemClick
? - person Abhishek V   schedule 26.02.2015