简体   繁体   English

如何更改 Android Navigation Drawer 的选定行的颜色?

[英]How to change the color of Android Navigation Drawer's Selected Row?

I'm using in my application a RecyclerView navigation drawer and I want to change the background of the selected row in my navigation drawer.我在我的应用程序中使用 RecyclerView 导航抽屉,我想更改导航抽屉中所选行的背景。 my navigation drawer adapter code is我的导航抽屉适配器代码是

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import butterknife.ButterKnife;
import butterknife.Bind;

public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.ViewHolder>{
private static final int HEADER_TYPE = 0;
private static final int ROW_TYPE = 1;
private List<DrawerBean> rows;
static OnItemClickListener mItemClickListener;
private static Context context;
public DrawerAdapter(Context context,List<DrawerBean> rows) {
    this.rows = rows;
    this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(viewType==HEADER_TYPE){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_header, parent, false);
        return new ViewHolder(view,viewType);
    }else if(viewType==ROW_TYPE){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_row,parent,false);
        return new ViewHolder(view,viewType);
    }
    return null;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if(holder.viewType == ROW_TYPE){
        DrawerBean drawerBean = rows.get(position - 1);
        holder.text.setText(drawerBean.getTitle());
        holder.icon.setImageResource(drawerBean.getIcon());
    }
}

@Override
public int getItemCount() {
    return rows.size()+1;
}

@Override
public int getItemViewType(int position) {
    if(position==0)
        return HEADER_TYPE;
    return ROW_TYPE;
}

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected int viewType;
    @Bind(R.id.drawer_row_icon)ImageView icon;
    @Bind(R.id.drawer_row_text)TextView text;

    public ViewHolder(View itemView, int vType) {
        super(itemView);
        viewType = vType;
        if(viewType==ROW_TYPE){
            itemView.setOnClickListener(this);
            ButterKnife.bind(this, itemView);
        }
    }
    @Override
    public void onClick(View v) {
        if (mItemClickListener != null) {
            mItemClickListener.onItemClick(v, getAdapterPosition());
        }
    }
}
public interface OnItemClickListener {
    public void onItemClick(View view , int position);
}
public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
    this.mItemClickListener = mItemClickListener;
}}

I need in this class to change the color of selected row我需要在这个类中更改所选行的颜色

RecyclerView does not handle selection states like a ListView .You need to do it manually inside your ViewHolder. RecyclerView不像ListView那样处理选择状态。您需要在 ViewHolder 中手动完成。 What you need to do is maintain a reference to the selected item inside the adapter and call view.setSelected(true) on the layout view of the selected item position.But I suggest that you should use NavigationView provided by the Design Support Library.您需要做的是在适配器内部维护对所选项目的引用,并在所选项目位置的布局视图上调用view.setSelected(true) 。但我建议您应该使用Design Support Library提供的NavigationView It's much easier to set up and handles the cases seen in your code设置和处理代码中出现的情况要容易得多

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM