片段抽屉RecyclerView项目没有得到涟漪效应

时间:2016-10-05 14:45:49

标签: android xml android-fragments android-recyclerview

我有一个带有RecyclerView的碎片导航抽屉和其他一些视图。每当我将手指放在recyclerview上的某个项目上时,它都不会显示所选的状态颜色。虽然我已经把所有代码都需要了。

RecyclerView项目行:

   <LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:paddingEnd="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingStart="10dp"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"
android:id="@+id/layout"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">



<ImageView
    android:layout_width="26dp"
    android:layout_height="26dp"
    android:layout_marginLeft="10dp"
    android:layout_marginStart="10dp"
    android:layout_gravity="center_vertical"
    android:id="@+id/icon"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15dp"
    android:layout_marginStart="15dp"
    android:textSize="16sp"
    android:layout_gravity="center_vertical"
    android:id="@+id/title"/>

   </LinearLayout>

RecyclerView适配器:

  List<NavDrawerItems> data = Collections.emptyList();
private LayoutInflater inflater;
private Context context;
int selectedPosition = 0;


public NavigationDrawerAdapter(Context context, List<NavDrawerItems> data) {
    this.context = context;
    inflater = LayoutInflater.from(context);
    this.data = data;
}

public void delete(int position) {
    data.remove(position);
    notifyItemRemoved(position);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.nav_drawer_row, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    if(selectedPosition == position){
        holder.layout.setBackgroundColor(context.getResources().getColor(R.color.grey_efef));
        holder.title.setTextColor(context.getResources().getColor(R.color.dark_red));
        holder.icon.setColorFilter(context.getResources().getColor(R.color.dark_red));
    } else {
        holder.layout.setBackgroundColor(context.getResources().getColor(R.color.white));
        holder.title.setTextColor(context.getResources().getColor(R.color.black));
        holder.icon.setColorFilter(context.getResources().getColor(R.color.black));
    }
    NavDrawerItems current = data.get(position);
    holder.title.setText(current.getTitle());
    holder.icon.setImageResource(current.getIcon());

}



@Override
public int getItemCount() {
    return data.size();
}

class MyViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ImageView icon;
    LinearLayout layout;

    public MyViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.title);
        icon = (ImageView) itemView.findViewById(R.id.icon);
        layout = (LinearLayout) itemView.findViewById(R.id.layout);
    }
}

如果我从RecyclerView适配器中删除此代码,它可以正常工作:

  if(selectedPosition == position){
        holder.layout.setBackgroundColor(context.getResources().getColor(R.color.grey_efef));
        holder.title.setTextColor(context.getResources().getColor(R.color.dark_red));
        holder.icon.setColorFilter(context.getResources().getColor(R.color.dark_red));
    } else {
        holder.layout.setBackgroundColor(context.getResources().getColor(R.color.white));
        holder.title.setTextColor(context.getResources().getColor(R.color.black));
        holder.icon.setColorFilter(context.getResources().getColor(R.color.black));
    }

但是此代码用于显示recyclerview中当前选定的项目。我怎样才能实现这两者。

1 个答案:

答案 0 :(得分:1)

我通过修改recyclerview项目的代码解决了这个问题。

<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/layout"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="horizontal"
   android:paddingTop="15dp"
   android:paddingBottom="15dp"
   android:paddingEnd="10dp"
   android:paddingLeft="10dp"
   android:paddingRight="10dp"
   android:paddingStart="10dp"
   android:clickable="true"
   android:focusable="true"
   android:background="?android:attr/selectableItemBackground">

   <ImageView
       android:layout_width="24dp"
       android:layout_height="24dp"
       android:layout_marginLeft="10dp"
       android:layout_marginStart="10dp"
       android:layout_gravity="center_vertical"
       android:id="@+id/icon"/>

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="15dp"
       android:layout_marginStart="15dp"
       android:textSize="16sp"
       android:layout_gravity="center_vertical"
       android:id="@+id/title"/>

  </LinearLayout>

</LinearLayout>

看来,我正在更改使用背景设置的布局的背景颜色:

   android:background="?android:attr/selectableItemBackground"

所以我添加了一个新的Layout并将内容转移到其中。