2015-02-23 2 views
2

У меня есть ListView и компоновка Роу имеет ребенка с фоном набор на следующий селектор:Selector, в ListView (коромысло-ListView) строка, остается в состоянии нажимается после повторного instanciating адаптер

<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> 

и теперь этот сценарий происходит:

  1. Я экземпляр адаптера и установить его в ListView, с основным списком, скажем, модель а (внутри ListFragment)
  2. Я нажимаю на первую строку (также для другой строки), и только при нажатии селектор остается в нажатом состоянии, показывая серый цвет, ду!
  3. Я выбираю из меню какой-то элемент и триггеры: создаю новый экземпляр адаптера с моделью списка В и применяю его к списку.
  4. И теперь проблема: первая строка имеет селектор в нажатом состоянии

Подробнее: @Questions поднимаемые Абхишек V в комментарии: 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) Нажмите/сенсорный слушающего установлен грести макет или это ребенок? Ребенок 3) Какой слушатель вы используете, это onClick, onTouch или onItemClick? Список на самом деле скопирован из библиотеки android-swipelistview https://github.com/47deg/android-swipelistview. Щелчок, что делает ущерб устанавливается следующим образом:

frontView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      swipeListView.onClickFrontView(downPosition); 
     } 
    }); 

и этот щелчок идет уведомляя этот приемник

BaseSwipeListViewListener swipeListener = new BaseSwipeListViewListener() { 
    @Override 
    public void onClickFrontView(int position) { 

    }//... 

Спасибо!

+0

Если вы показываете «Адаптер» и «Выбор XML», возможно, мы поймаем что-то. – hrskrs

+0

Может не решить проблему, но пройдите по всем дочерним элементам и установите их состояние прессования на false 'setPressed (false)'. Если он перерабатывает представления в списке, один из них, возможно, не получил эквивалент «mouseUp», прежде чем потерял фокус. –

+0

вы можете дать нам дополнительную информацию - 1) Фон настроен на «малый» макета строки, а не на макет строки? 2) Нажмите/коснитесь прослушивателя, чтобы установить раскладку или его дочерние элементы. 3) Какой слушатель вы используете, это 'onClick',' onTouch' или 'onItemClick'? –

ответ

0

Этот вопрос вы столкнулись сообщалось здесь https://github.com/47deg/android-swipelistview/issues/41.

Согласно cooment по @strgev в этом потоке, исправить это -

редактировать класс SwipeListViewTouchListener, добавив строку ниже методу onTouch:

.... 
case MotionEvent.ACTION_UP: { 
view.onTouchEvent(motionEvent); 
... 

вы можете попробовать это?

+0

GREAT Спасибо за щедрость! Большое спасибо!: D – Misca

+0

Я рад, что это помогло :) –

0

Попробуйте с clearChoices и notifyDataSetChanged:

yourListView.clearChoices(); 
yourListView.getAdapter().notifyDataSetChanged(); 
+0

спасибо, но это не сработало, у меня на самом деле есть выборMode = «none» в списке – Misca

+0

попробуйте сделать его «одиночным» – hrskrs

+0

не сработало :(. – Misca

0

Это может быть mutate problem. Попробуйте назначить фон в строке программным путем, сначала набрав mutate().

Во-первых, получить Drawable экземпляр из пользовательского селекторного-Drawable, затем вызовите mutate() на него и, наконец, назначить вытяжке в качестве фона в строке и:

Drawable selector = getResources().getDrawable(R.drawable.your_selector) 
selector.mutate(); 
//... 
row.setBackground(selector); 
+0

Спасибо, bonnyz! Не работает ... – Misca