效果图:
思路:
1左右是两个listView,左边显示类型,右边显示类型和内容
2左边控制右边
左边的条目点击事件中拿到左边点击的类型,循环右边的数据,
当判断左边类型和右边类型相等时,定位右边listView的位置
lvTest.setSelection(i);并且return;
代码:
// 类型listView的条目点击事件,定位右边列表 lvType.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) {
// 左边类型 String typeT=listType.get(position); for(int i = 0; i < list.size(); i++) {
// 右边类型 String type=list.get(i).type; if(typeT.equals(type)) {
// 把定位listView的位置 lvTest.setSelection(i); return; } } } });
3右边控制左边
写右边listWiew的滑动监听setOnScrollListener,在onScroll方法中的参数firstVisibleItem显示第一个
条目的位置,拿到第一个条目对应的位置,传给类型的适配器,在类型适配器中判断选中
代码:
// 右边listView的滑动事件,点亮左边的选中 lvTest.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// 三个参数
// firstVisibleItem:当前能看见的第一个item的ID(从0开始)
// visibleItemCount:当前可见的item总数
// totalItemCount:列表中适配器总数量,也就是整个ListView中item总数 Logger.t("111").d("firstVisibleItem"+firstVisibleItem); String type = list.get(firstVisibleItem).type; typeAdapter.select(type); } });
4右边的listView中显示分类
其实每一个条目都有分类,只是不是一个分类的时候隐藏了;
实现代码:
在适配器的getView方法中:判断上一条和当前条目的类型是否一致,一样就隐藏,不一样就 显示