[英]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.