实现效果如图,点击大洲进行第一个listview数据的刷新且联动第二个listview数据更新,正常第二个listview是单选,点击后进行数据刷新,现在做的是数据多选最后点击确定按钮进行数据提交
首先实现两个listview联动效果:
数据源如下
"area": [ {
"id": "1009","namecn": "海岛",
"nameen": "island",
"countryinfo": [
{
"id": "2535",
"namecn": "AAA",
"nameen": "Fiji",
"level": "1",
}
{
"id": "2222",
"namecn": "BBB",
"nameen": "Fiji",
"level": "1",
}
}
]
我们取出area下的namecn作为第一个listview的数据命名为FiestList,取出countyinfo下的字段namecn并且加入自己的标示字段Boolean类型的ischeck作为第二个listview的数据
private List<String> firstList = new ArrayList<>(); private List<List> secondList = new ArrayList<>();
FirstList数据为字符串类型, secondList数据为country下的多个对象
取出数据之后则是数据的填充和初始化
private void initFirstListView() { //加载第一个list界面的数据并且设置第一个为红色,并且 initSecondListView(0);是调用加载第二个 firstAdapter = new SearchAreaFirstAdapter(HomeJieBanFragment.this.getActivity(), firstList); firstAdapter.setSelectPosition(0);//设置第一个为选中项 listViewFirst.setAdapter(firstAdapter); initSecondListView(0);//初始化secondlist listViewFirst.setOnItemClickListener(new AdapterView.OnItemClickListener() {//点击第一个list执行的操作 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { updataListView(position); } }); }
下面来解释上面的每一步,初始化FirstAdapter的时候setselectPosition(0)详细方法如下
下面方法为初始化第二个list
private void initSecondListView(int position) { //初始化加载完第一个之后加载第二个list 载入secondList的第一排数据 secondAdapter = new SearchAreaSecondAdapter(HomeJieBanFragment.this.getActivity(), secondList.get(position)); // secondAdapter.setSelectPosition(position); listViewSecond.setAdapter(secondAdapter); // updataListView2(position);//为了一进来的时候能取出第一项的数据 listViewSecond.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { updataListView2(position); } });初始化SecondList的时候对数据的ischeck做匹配,用来知道数据是否为选中状态
点击某一项的时候也来改变ischeck值,这样就能记录下secondlistview的是否选中展示了
代码片段不是很全面,总结来说就是secondlistview的数据是没有是否选中状态的,所以我们在得到json数据的过程中执行了一步操作就是把所有数据统一加入一个tag值:ischeck=false。初始化secondadapter时通过tag值来判断是否显示选中状态,点击某一项之后改变其tag值也相应改变其选中状态即可~