Android为什么我对背景选择器产生双重连锁反应?

时间:2015-06-24 07:12:10

标签: android android-listview material-design android-selector rippledrawable

我对按下项目产生双重连锁效果(从项目中心开始产生连锁效果,从触摸点开始产生第二个效果),这是我问题的截图:

enter image description here

但这只发生在第一项上,而在其他项中,涟漪效应效果很好。我正在关注这个udacity project,我确实意识到他们有同样的问题。

以下是我正在使用的资源:

可绘制-V21 / touch_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_pressed="true">
      <ripple android:color="@color/grey" />
  </item>

  <item android:drawable="@color/light_blue" android:state_activated="true" />

  <item android:drawable="@android:color/transparent" />
</selector>

row_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/touch_selector"
  android:minHeight="?android:attr/listPreferredItemHeight"
  android:orientation="horizontal">
  ...
</LinearLayout>

fragment_main.xml

...
<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@null"
    tools:listitem="@layout/row_item" />
...

如何在按下的项目上修复此双重涟漪效果? (同样,这只发生在第一项,其他项目运作良好)。

以下是源代码: https://github.com/epool/SpotifyStreamer/tree/stage-2

3 个答案:

答案 0 :(得分:0)

@epool,

我下载了你的项目并运行它。 问题不仅发生在列表的第一项,也发生在其他项目上。我确实注意到它不一致,但并不是每次都发生。

看起来你可能已经在不同的地方设置了涟漪效果,或者至少启用了涟漪效果。

如果您只是删除下面的代码行,它应该可以正常工作! =]

<item android:state_pressed="true">
   <ripple android:color="@color/grey" />
</item>

在旁注中,我在列表的不同项目上多次单击以查看它们的行为方式,通过这样做,我收到以下错误:

  

java.lang.ArrayIndexOutOfBoundsException:src.length = 2048 srcPos = 2048 dst.length = 2048 dstPos = 0 length = 2047

Binder.java 文件中的 446 。所以你可能想解决这个问题。

如果您有任何其他问题,请告诉我。

答案 1 :(得分:0)

我也有同样的问题,经过几个小时的搜索后,我意识到涟漪效应会被触发两次,因为我将v.setEnabled(false)然后v.setEnabled(true)置于onClickListener内以禁用onClick正在进行中的视图。

删除它们解决了我的问题。

答案 2 :(得分:0)

我认为,如果不是在列表项上设置background而是在列表视图本身上将其设置为listSelector,或者不包括{{1} }在该项目的背景选择器中。