选择,在列表视图(刷卡-列表视图)行,停留在状态下按下重新instanciating适配器

问题描述:

我有一个列表视图,后一排的布局具有设置为以下选择背景孩子:选择,在列表视图(刷卡-列表视图)行,停留在状态下按下重新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. 我从菜单中选择一些项目并触发:使用列表模型B创建适配器的新实例,并将其应用于列表视图。
  4. 而现在的问题:第一行有压入状态选择

更多信息: @Questions由阿布舍克V在评论提出: 1.背景被设定为行布局的孩子,而不是行布局本身的权利?对!这里是布局,选择设置为ID为“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? listview实际上是从库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

如果您显示'Adapter'和'XML Selector',也许我们会发现一些东西 – hrskrs 2015-02-25 15:00:03

+0

可能无法解决问题,但是可以遍历所有的孩子并将他们的按下状态设置为false setPressed(false)'。如果它正在回收listview中的视图,其中一个在失去焦点之前可能没有相当于'mouseUp'。 – 2015-02-25 17:55:54

+0

你可以给我们一些更多的信息 - 1)背景设置为行布局的“子”,而不是行布局本身的权利? 2)点击/触摸侦听器被设置为行布局或它的孩子? 3)你正在使用哪个听众,是onClick,onTouch还是onItemClick? – 2015-02-26 07:13:43

你面对已经在这里https://github.com/47deg/android-swipelistview/issues/41报告的问题。

按照由该线程@strgev的cooment的解决方法是 -

编辑类SwipeListViewTouchListener通过将线下到onTouch方法:

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

你可以试试吗?

+0

GREAT !祝贺赏金!谢谢你!:D – Misca 2015-02-26 11:02:08

+0

我很高兴它帮助:) – 2015-02-26 11:28:26

尝试用clearChoicesnotifyDataSetChanged

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

谢谢,但它没有工作,我实际上有choiceMode =“none”的名单上 – Misca 2015-02-24 06:47:44

+0

尝试使它“单” – hrskrs 2015-02-25 14:57:59

+0

没有工作:(。 – Misca 2015-02-26 07:50:43

这可能是一个mutate problem。尝试通过首先在drawable上调用mutate()来以编程方式将背景分配到行。

首先,从您的自定义选择抽拉获得Drawable实例,然后调用它mutate()最后分配绘制作为行的背景:

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

谢谢bonnyz!没有工作... – Misca 2015-02-26 08:22:43