RecyclerView選中後保持高亮狀態,且兩級聯動示例
阿新 • • 發佈:2020-12-27
技術標籤: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進行了程式碼實現,希望對初入行的你有所幫助。
介面卡官網地址 http://www.recyclerview.org/ ↩︎