无法在RecyclerView

时间:2016-06-13 20:07:18

标签: android android-recyclerview

我有一个主要细节应用程序,它使用Fragments分割视图屏幕。主屏幕是包含RecyclerView的列表。这是布局XML。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

      <TextView
            android:layout_width="match_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:text="Page Title" />

      <android.support.v7.widget.RecyclerView
             android:id="@+id/page_list"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />                

</LinearLayout>

项目行布局xml如下。

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:id="@+id/item_layout">

<TextView
    android:id="@+id/contact_name"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    />

<Button
    android:id="@+id/message_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textSize="10sp"
    />
</LinearLayout> 

在适配器类上,我创建了一个变量来保存所选项目的位置

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder> {
     private int selectedPos;

     @Override
     public void onBindViewHolder(ListViewHolder holder, int position) {
       holder.itemView.setSelected(selectedPos == position);
       holder.bind(mData.get(position));
     }

     class ListViewHolder extends RecyclerView.ViewHolder {
         public ListViewHolder(View itemView) {
             super(itemView);
         }
         public void bind(ListEntity entity) {
           //UI rendering
         }
         @OnClick(R.id.layout_campaign)
         public void onItemClicked(View view) {
            notifyItemChanged(selectedPos);
            selectedPos = getLayoutPosition();
            notifyItemChanged(selectedPos);
         }
}

单击列表中的项目时,列表项不会突出显示。关于这个问题看了很多类似的帖子,但无法让它发挥作用。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

如果要在用户按下该行时突出显示,则只需在行的父布局的背景中使用选择器。 的 row_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
      <item android:state_selected="true"
           android:drawable="@color/red" /> <!-- pressed -->
     <item android:state_pressed="true"
           android:drawable="@color/red" /> <!-- pressed -->
    <item android:drawable="@color/gray" /> <!-- default -->
</selector>

将此xml放在drawable中并设置为父布局的背景。

希望它能奏效:)