效果图:
思路:
用addView的方式添加三个recyclerview,使用LinearLayout横向布局,权重weight平分。
代码:
public class Test2Activity extends AppCompatActivity {
private LinearLayout parentView;
private RecyclerView recyclerView1, recyclerView2, recyclerView3;
private List<DataBean> siteData; // 列表1数据
private List<StationBean> stationData; // 列表2数据
private List<DeviceBean> deviceData; // 列表3数据
private boolean isAddSecondView = false;
private boolean isAddThirdView = false;
private int lastPosV1 = -1;
private int lastPosV2 = -1;
private int lastPosV3 = -1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup_linkage_recyclerview);
// widget
parentView = findViewById(R.id.parentView);
// 实例化
siteData = new ArrayList<>();
// 取数据
String str = FileUtils.readMemory2(this, FileUtils.SITE_DATA_NAME);
if (!TextUtils.isEmpty(str)) {
BSDBean bsdBean = new Gson().fromJson(str, BSDBean.class);
siteData.addAll(bsdBean.getData());
} else {
Toast.makeText(this, "暂无数据", Toast.LENGTH_LONG).show();
return;
}
// set first recyclerview
recyclerView1 = new RecyclerView(this);
LinearLayoutManager llManager = new LinearLayoutManager(this);
llManager.setOrientation(RecyclerView.VERTICAL);
recyclerView1.setLayoutManager(llManager);
// adapter
LinkageSiteAdapter siteAdapter = new LinkageSiteAdapter(this, siteData);
recyclerView1.setAdapter(siteAdapter);
// set second recyclerview
recyclerView2 = new RecyclerView(this);
LinearLayoutManager llManager2 = new LinearLayoutManager(this);
llManager2.setOrientation(RecyclerView.VERTICAL);
recyclerView2.setLayoutManager(llManager2);
// adapter
stationData = new ArrayList<>();
LinkageStationAdapter stationAdapter = new LinkageStationAdapter(this, stationData);
recyclerView2.setAdapter(stationAdapter);
// set third recyclerview
recyclerView3 = new RecyclerView(this);
LinearLayoutManager llManager3 = new LinearLayoutManager(this);
llManager3.setOrientation(RecyclerView.VERTICAL);
recyclerView3.setLayoutManager(llManager3);
// adapter
deviceData = new ArrayList<>();
LinkageDeviceAdapter deviceAdapter = new LinkageDeviceAdapter(this, deviceData);
recyclerView3.setAdapter(deviceAdapter);
// add first recyclerview
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f);
parentView.addView(recyclerView1, 0, lp);
// click listener
// 列表1
siteAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
// 更新recyclerview1当前选中item的状态
adapter.notifyItemChanged(position, 0);
// 上一次点击的item恢复为默认效果(未选中状态)
if (lastPosV1 > -1 && lastPosV1 != position) {
adapter.notifyItemChanged(lastPosV1);
}
lastPosV1 = position;
// add second recyclerview
lastPosV2 = -1;
if (!stationData.isEmpty()) {
stationData.clear();
}
stationData.addAll(siteData.get(position).getStation());
stationAdapter.notifyDataSetChanged();
// 未添加recyclerView2
if (!isAddSecondView) {
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
parentView.addView(recyclerView2, 1, lp2);
isAddSecondView = true;
}
// clear device list data
if (!deviceData.isEmpty()){
deviceData.clear();
deviceAdapter.notifyDataSetChanged();
}
}
});
// 列表2
stationAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
// 更新recyclerview2当前选中状态
adapter.notifyItemChanged(position, 1);
// 上一次点击的item恢复默认效果(未选中状态)
if (lastPosV2 > -1 && lastPosV2 != position) {
adapter.notifyItemChanged(lastPosV2);
}
lastPosV2 = position;
// add third recyclerview
lastPosV3 = -1;
if (!deviceData.isEmpty()) {
deviceData.clear();
}
deviceData.addAll(stationData.get(position).getDevice());
deviceAdapter.notifyDataSetChanged();
// 未添加recyclerview3
if (!isAddThirdView) {
LinearLayout.LayoutParams lp3 = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f);
parentView.addView(recyclerView3, 2, lp3);
isAddThirdView = true;
}
}
});
// 列表3
deviceAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
// 更新recyclerview3当前选中状态
adapter.notifyItemChanged(position, 2);
// 上一次点击的item恢复默认效果(未选中状态)
if (lastPosV3 > -1 && lastPosV3 != position) {
adapter.notifyItemChanged(lastPosV3);
}
lastPosV3 = position;
}
});
}
}
public class LinkageSiteAdapter extends BaseQuickAdapter<DataBean, BaseViewHolder> {
private final int normal_color;
private final int select_color;
public LinkageSiteAdapter(Context context, @Nullable List<BSDBean.DataBean> data) {
super(R.layout.item, data);
normal_color = context.getResources().getColor(R.color.c3);
select_color = context.getResources().getColor(R.color.c4);
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, BSDBean.DataBean dataBean) {
// 获取当前item的position
int position = baseViewHolder.getLayoutPosition();
String tv = dataBean.getBureau().getName();
baseViewHolder.setText(R.id.name, tv);
RelativeLayout relRootView = baseViewHolder.findView(R.id.relRootView);
relRootView.setBackgroundColor(normal_color);
}
@Override
public void onBindViewHolder(@NotNull BaseViewHolder holder, int position, @NotNull List<Object> payloads) {
super.onBindViewHolder(holder, position, payloads);
if (payloads.isEmpty()) {
onBindViewHolder(holder, position);
} else {
RelativeLayout relRootView = holder.findView(R.id.relRootView);
relRootView.setBackgroundColor(select_color);
}
}
}
说明:recyclerview点击item背景变色的代码有点点问题,这里根据需求修改,以上代码只是思路记录。