簡體   English   中英

如何更改 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM