我有一个主要细节应用程序,它使用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);
}
}
单击列表中的项目时,列表项不会突出显示。关于这个问题看了很多类似的帖子,但无法让它发挥作用。我错过了什么吗?
答案 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中并设置为父布局的背景。
希望它能奏效:)