Android中ListView左右联动

本文介绍了如何在Android中实现ListView的左右联动效果。通过左右两个ListView,左边选择类型,右边展示对应内容。当左边类型被点击时,同步更新右边ListView的位置;右边滑动时,更新左边ListView的选择状态。详细讲解了实现思路,并提供了全部的代码实现,包括MainActivity、布局文件、适配器以及实体类。最后提供了源码下载链接。
摘要由CSDN通过智能技术生成

效果图:
这里写图片描述
思路:
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方法中:判断上一条和当前条目的类型是否一致,一样就隐藏,不一样就 显示

  //      当前条目类型
        String  type=goosList.get(position).type;

        if (position == 0) {
            viewHolder.tvType.setVisibility(View.VISIBLE);
        } else {
            //      上一个条目类型
            String nextType = goosList.get(position - 1).type;
            if (type.equals(nextType)) {
                viewHolder.tvType.setVisibility(View.GONE);
            } else {
                viewHolder.tvType.setVisibility(View.VISIBLE);
            }
        }

讲完了,下面贴出所有的代码:
MainActivity中

package com.zhh.listviewtest;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.Menu
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值