效果图:
思路:
用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背景变色的代码有点点问题,这里根据需求修改,以上代码只是思路记录。
Httpd服务器的坑在/etc/httpd/conf/httpd.conf中的配置信息, 有时注释到的内容仍然会生效配置Auth时, 允许htpasswd规定的文件中的所有的用户, Require valid-uesr, 允许特定的用户Require user user1 user2 user3 ...允许组, Require group group1 group2在Cent...
1.创建索引库使用postman或curl这样的工具创建:put http://localhost:9200/索引库名称{ "settings":{ "index":{ "number_of_shards":1, "number_of_replicas":0 } }}2.创建映射post http://localhost:9200/索引库名称/类型名称/_map...
简单介绍一下echarts他是javascript的图表库,有百度捐赠给apache基金会的,因为他不想D3和heightCharts一样 比较符合中国人的习惯优点丰富的图表类型提供开箱即用的 20 多种图表和十几种组件,并且支持各种图表以及组件的任意组合。强劲的渲染引擎Canvas、SVG 双引擎一键切换,增量渲染、流加载等技术实现千万级数据的流畅交互。专业的数据分析通过数据集管理数据,支持数据过滤、聚类、回归,帮助实现同一份数据的多维度分析。优雅的可视化设计默认设计遵从可视化原则,支
https://mp.weixin.qq.com/s/KvAyXpDhqWROtTX1Ol3a4Q5月10-12日,Unite Shanghai 2019即将在上海国际会议中心正式开幕。本次大会共设有Keynote主题演讲,四大技术专场,Unity教育峰会,Training Day开发者训练日,近40个丰富精彩的互动展位,以及一系列丰富的周边活动。大会信息时间:5...
首先约定json表示节点的规则,如{ "data": { "req": [{ "node1": "value1", "node2": "value2" }, { "node3": "value3", "node4": "value4" }] }}要获取node2的值时,规则应该填写JSON.data.req[0].node2要获取node3...
切入点表达式(前置通知、后置通知、异常通知、环绕通知、最终通知)
文章目录SFTPSSHTELNETXshell 和 Xftp一个好用的xshell替代工具-MobaXtermSFTPsftp是Secure File Transfer Protocol的缩写,安全文件传送协议。SSHSSH是一种网络协议,用于计算机之间的加密登录。TELNETTelnet协议是TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于网页服务器的远程控制,可供使用者在本地主机运行远程主机上的工作。Xshell 和 XftpXshell是一个用于
(一)“妈妈,妈妈,”小怪兽问,“我什么时候才能长大呢?”正做饭的怪兽妈妈和蔼地问:“干吗想长大呀,做妈妈的乖宝宝不好吗?”“长大了我就能让奥特曼打了。”小怪兽一脸的憧憬。(二)“妈妈,妈妈。”小怪兽兴奋地跑进屋,“我考上啦......”正做饭的怪兽妈妈穿着围裙迎出来:“你考上什么啦,儿子。”小怪兽满脸的幸福:“我考上‘替身演员...
人生就像攀岩,其实高考,只是我们奋力翻过的第一座山。等翻上山顶,你会发现,山的那边依旧有无数座山,等着你继续攀!2019年高考氛围越来越石河子大学浓,很多小伙伴关注石河子大学全国各省最低录取分数线,石河子大学最低投档线的相关信息。本文高考助手网小编整理了石河子大学录取分数线的相关信息,希望对于参加2019年的高考填报志愿其参考左右。奋斗在高考一线,埋头在书本之间,金榜题名只在弹指之间,愿你马到成功...
1.创建自定义DataTable/// 创建自定义DataTable(一) 根据列名字符串数组,/// </summary>/// <param name="sList">列名字符串数组</param>/// <returns>DataTable</returns>public static Dat...
一、泛型的简单介绍1. 泛型的引入 JDK 1.5中引入了泛型这个新特性,泛型的本质是参数化类型(Parameterized Types)的应用,也就是指操作的数据类型被指定为一个参数,之后使用到该数据时必须符合指定的类型。这种参数化类型可以在类、接口和方法中使用,分别称为泛型类、泛型接口和泛型方法。2. 为什么引入泛型 泛型思想在C++模板(T...
常见问题:介绍下 Java 内存区域(运行时数据区)Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么)对象的访问定位的两种方式(句柄和直接指针两种方式)拓展问题:String类和常量池8种基本类型的包装类和常量池如何判断对象是否死亡(两种方法)。简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。如何...