RecyclerView Item 的按下状态

Ege*_*glu 6 android android-recyclerview

我使用水平 recyclerview 作为自定义底部导航栏。我想为每个项目定义一个按下状态,以便它们的颜色可以改变。

我试图这样做,但无法管理它

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/menu_pressed" android:state_activated="true" />
    <item android:drawable="@color/menu_pressed" android:state_pressed="true" />
    <item android:drawable="@color/menu_pressed" android:state_checked="true" />
    <item android:drawable="@color/menu_pressed" android:state_focused="true" />
    <item android:drawable="@color/menu" />
</selector>
Run Code Online (Sandbox Code Playgroud)

回收者观点:

 <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:layout_gravity="bottom"
        android:background="@drawable/menu_selector"
        android:fadingEdge="vertical|horizontal"
        android:fadingEdgeLength="60dp"
        android:fillViewport="false"
        android:requiresFadingEdge="horizontal|vertical"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true">
Run Code Online (Sandbox Code Playgroud)

Eoi*_*oin 4

使用 RecyclerView,您无法像使用 ListView 那样为每个项目定义和设置单个选择器。它必须在观众层面上完成。

因此,每个项目布局都必须有一个选择器设置为背景。

<FrameLayout
    android:id="@+id/frame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:background="@drawable/menu_selector">
Run Code Online (Sandbox Code Playgroud)

然后在你的适配器中onBind你可以设置一个点击监听器,它应该可以工作

holder.frame.setOnClickListener {
  // do something
}
Run Code Online (Sandbox Code Playgroud)