1. 程式人生 > 其它 >RecyclerView選中後保持高亮狀態,且兩級聯動示例

RecyclerView選中後保持高亮狀態,且兩級聯動示例

技術標籤:AndroidRecyclerViewandroid

Android使用RecyclerView實現二級聯動且選中後保持高亮狀態

文章目錄


前言

相信不少剛剛步入Android開發的“程式猿”在遇到公司類似美團、餓了麼的點餐列表,都會比較迷茫怎麼寫,之前我寫過使用ListView實現的功能,也可以參考看下。現在使用RecyclerView重新實現這個功能,程式碼更加簡潔明瞭的實現了列表的二級聯動,選中一級列表後會保持高亮,點選二級列表會有相應提示。具體功能看下截圖能否滿足各位小夥伴的需求,如有相似可以下載後參考。



一、MainActivity主要程式碼

這裡主要對RecyclerView進行了配置,初始化了介面卡,進行了介面卡的繫結,以及點選事件的監聽設定。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        ButterKnife.bind(this);

        secondAdapter = new SecondAdapter
(null); secondAdapter.setOnOptionClickListener(new SecondAdapter.OnOptionClickListener() { @Override public void itemInfo(MultipleChoiceInfo choiceInfo, int pos) { tvConfirmSelect.setText(choiceInfo.getName()); } }); rlvSecondOption.
setLayoutManager(new LinearLayoutManager(this)); rlvSecondOption.setAdapter(secondAdapter); multipleAdapter = new MultipleAdapter(makeData()); multipleAdapter.setOnOptionClickListener(new MultipleAdapter.OnOptionClickListener() { @Override public void itemInfo(MultipleChoiceInfo choiceInfo, int pos) { tvConfirmSelect.setText(""); secondAdapter.setNewInstance(makeSecondData(pos + 1)); } }); multipleAdapter.changeItemStatus(multipleAdapter.getData().get(0), 0);//設定預設選中項 rlvFirstOption.setLayoutManager(new LinearLayoutManager(this)); rlvFirstOption.setAdapter(multipleAdapter); tvConfirm.setOnClickListener(this); }

二、兩個介面卡的使用

1.一級列表介面卡

這裡是一級介面卡,簡單的只使用了一個文字控制元件,先展示介面卡程式碼如下:

public class MultipleAdapter extends BaseQuickAdapter<MultipleChoiceInfo, BaseViewHolder> {

    private OnOptionClickListener onOptionClickListener;

    public MultipleAdapter(@Nullable List<MultipleChoiceInfo> data) {
        super(R.layout.main_item, data);
    }

    @Override
    protected void convert(@NotNull BaseViewHolder holder, MultipleChoiceInfo item) {
        //獲取檢視控制元件
        TextView tvItemUnit = holder.getView(R.id.tv_item_unit);
        //設定列表資料
        tvItemUnit.setText(item.getName());
        //根據選擇情況進行判斷,設定不通背景
        if (item.isSelect()) {
            tvItemUnit.setBackgroundResource(R.drawable.square_gray);
        } else {
            tvItemUnit.setBackgroundResource(R.drawable.line_bg_white_only_bottom);
        }
        tvItemUnit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeItemStatus(item, holder.getAdapterPosition());
            }
        });
    }
    //點選時候改變選項狀態,並更新介面卡
    public void changeItemStatus(MultipleChoiceInfo info, int targetPos) {
        if (onOptionClickListener != null) {
            onOptionClickListener.itemInfo(info, targetPos);
        }

        for (MultipleChoiceInfo choiceInfo : getData()) {
            choiceInfo.setSelect(false);
        }
        getData().get(targetPos).setSelect(true);
        notifyDataSetChanged();

    }
    //自定義選項點選監聽事件
    public interface OnOptionClickListener {
        void itemInfo(MultipleChoiceInfo choiceInfo, int pos);
    }

    public void setOnOptionClickListener(OnOptionClickListener listener) {
        onOptionClickListener = listener;
    }

}

2.二級列表介面卡程式碼

二級列表介面卡使用了ConstraintLayout約束進行了UI佈局,先展示只要介面卡程式碼如下:

public class SecondAdapter extends BaseQuickAdapter<MultipleChoiceInfo, BaseViewHolder> {

    private OnOptionClickListener onOptionClickListener;

    public SecondAdapter(@Nullable List<MultipleChoiceInfo> data) {
        super(R.layout.main_item_second, data);
    }

    @Override
    protected void convert(@NotNull BaseViewHolder holder, MultipleChoiceInfo item) {
        //獲取檢視控制元件
        ConstraintLayout clRoot = holder.getView(R.id.cl_second_root);
        TextView tvItemUnit = holder.getView(R.id.tv_second_title);
        //設定二級列表資料
        tvItemUnit.setText(item.getName());
        //設定選項點選事件
        clRoot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onOptionClickListener != null) {
                    onOptionClickListener.itemInfo(item, holder.getAdapterPosition());
                }
            }
        });
    }

    public interface OnOptionClickListener {
        void itemInfo(MultipleChoiceInfo choiceInfo, int pos);
    }


    public void setOnOptionClickListener(OnOptionClickListener listener) {
        onOptionClickListener = listener;
    }

}

總結

主要程式碼都在這裡了,UI佈局程式碼不在上傳了,可以在demo裡面檢視。這裡使用了RecyclerView+BaseQuickAdapter1進行了程式碼實現,希望對初入行的你有所幫助。


  1. 介面卡官網地址 http://www.recyclerview.org/ ↩︎