![](/img/trans.png)
[英]How to change the selected item's background color in android navigation drawer?
[英]How to change the color of Android Navigation Drawer's Selected Row?
我在我的應用程序中使用 RecyclerView 導航抽屜,我想更改導航抽屜中所選行的背景。 我的導航抽屜適配器代碼是
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;
}}
我需要在這個類中更改所選行的顏色
RecyclerView
不像ListView
那樣處理選擇狀態。您需要在 ViewHolder 中手動完成。 您需要做的是在適配器內部維護對所選項目的引用,並在所選項目位置的布局視圖上調用view.setSelected(true)
。但我建議您應該使用Design Support Library提供的NavigationView 。 設置和處理代碼中出現的情況要容易得多
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.