简单实现左右两个listview联动,点击左边切换右边

原理:

    左右两个listview联动,无非是左边的listView设置条目点击事件,点击之后,先改变左边条目点击后的状态,再改变右边适配器的数据源

步骤

1.在MainActivity中布局文件创建左右两个listView

<span style="font-size:14px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity" >


    <ListView
        android:id="@+id/lv_left"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </ListView>

    <ListView
        android:id="@+id/lv_Right"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3" >
    </ListView>

</LinearLayout></span>


2.设置两个listview子条目的布局

      左边就是一个简单的textview

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#f9f9f9"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="左边条目"
        android:textColor="#000000"
        android:textSize="18sp" />

</LinearLayout></span>


    右边由一张简单的图和两个textview组成的

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#f9f9f9"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_right"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        
        android:padding="5dp"
        android:text="右边条目"
        android:textColor="#000000"
        android:textSize="18sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:orientation="horizontal"
        android:gravity="center_vertical" >

        <ImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:background="@drawable/jipai" />

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左边条目"
            android:textColor="#000000"
            android:textSize="18sp" />
    </LinearLayout>

</LinearLayout></span>


3.创建左右两个adapter

    左边的adapter

<span style="font-size:14px;">public class LeftAdapter extends BaseAdapter {

    private Context context;
    String data[] = { "销量排行", "招牌明星", "奶茶果汁", "销量排行", "招牌明星", "奶茶果汁", "销量排行",
            "招牌明星", "奶茶果汁", "销量排行", "招牌明星", "奶茶果汁", "销量排行", "招牌明星", "奶茶果汁",
            "销量排行", "招牌明星", "奶茶果汁", "销量排行", "招牌明星", "奶茶果汁" };
    private int currentPosition;

    public LeftAdapter(Context context) {
        super();
        this.context = context;
    }

    /**
     * 这个方法是用来设置字体颜色的
     *
     * @param position
     */
    public void updateData(int position) {
        currentPosition = position;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }
  @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHold vh = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_left, null);
            vh = new ViewHold();
            convertView.setTag(vh);
            vh.tv_left = (TextView) convertView.findViewById(R.id.tv_left);
        } else {
            vh = (ViewHold) convertView.getTag();
        }
        // 在这里改变颜色
        if (position == currentPosition) {
            vh.tv_left.setTextColor(Color.RED);
        } else {
            vh.tv_left.setTextColor(Color.BLACK);
        }
        vh.tv_left.setText(data[position]);
        return convertView;
    }

    public class ViewHold {
        TextView tv_left;
    }
}</span>
  右边的adapter

<span style="font-size:14px;">public class RightAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<String> data = new ArrayList<String>();

    /**
     * 这个方法是用来更新数据源
     *
     * @param context
     */
    public RightAdapter(Context context) {
        super();
        this.context = context;
    }

    public void updateData(ArrayList<String> list) {
        data.clear();
        data.addAll(list);
        this.notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHold vh = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_right, null);
            vh = new ViewHold();
            convertView.setTag(vh);
            vh.tv_content = (TextView) convertView
                    .findViewById(R.id.tv_content);
        } else {
            vh = (ViewHold) convertView.getTag();
        }
        vh.tv_content.setText(data.get(position));
        return convertView;
    }

    public class ViewHold {
        TextView tv_content;
    }

}</span>


4.在MainActivity中找到控件并初始化数据,我在这里做了一些假数据

  初始化数据

<span style="font-size:14px;">private void initData() {
        lists = new ArrayList<ArrayList<String>>();
        ArrayList<String> list1 = new ArrayList<String>();
        list1.add("萝卜");
        list1.add("大葱");
        list1.add("茄子");
        list1.add("大蒜");
        list1.add("生姜");
        ArrayList<String> list2 = new ArrayList<String>();
        list2.add("苹果");
        list2.add("梨");
        list2.add("香蕉");
        list2.add("橘子");
        list2.add("西瓜");
        ArrayList<String> list3 = new ArrayList<String>();
        list3.add("郑一");
        list3.add("王二");
        list3.add("伊三");
        list3.add("荆四");
        list3.add("汤五");
        for (int i = 0; i < 7; i++) {
            lists.add(list1);
            lists.add(list2);
            lists.add(list3);
        }

    }
初始化view

private void initView() {
        leftAdapter = new LeftAdapter(context);
        lv_left.setAdapter(leftAdapter);

        rightAdapter = new RightAdapter(context);
        lv_Right.setAdapter(rightAdapter);
        rightAdapter.updateData(lists.get(0));//设置初始值

 
    }</span>
5.设置条目点击事件   实现联动的效果

    <span style="font-size:14px;">   lv_left.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                leftAdapter.updateData(arg2);
                rightAdapter.updateData(lists.get(arg2));
            }
        });</span>

这样我们就基本实现了listview的联动


  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这样的功能可以采用以下步骤: 1. 在左边ListView 中设置 item 点击监听器,当点击某个 item 时获取该 item 的数据,然后根据该数据更换右边 ListView 的数据。 2. 右边ListView 可以使用 ArrayAdapter 或者 BaseAdapter 来实现,根据不同的数据来动态改变 Adapter 中的数据源。 3. 在 Adapter 中重写 getView() 方法,根据新的数据源来动态渲染 ListView 中的每个 item。 下面是一个简单的示例代码: ``` // 左边ListViewitem 点击事件 listViewLeft.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取当前点击item 数据 String data = (String) parent.getItemAtPosition(position); // 根据数据更换右边 ListView 的数据源 ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, getData(data)); listViewRight.setAdapter(adapter); } }); // 根据不同的数据来获取右边 ListView 的数据源 private List<String> getData(String data) { List<String> dataList = new ArrayList<>(); if (data.equals("A")) { dataList.add("A - 1"); dataList.add("A - 2"); dataList.add("A - 3"); } else if (data.equals("B")) { dataList.add("B - 1"); dataList.add("B - 2"); dataList.add("B - 3"); } else if (data.equals("C")) { dataList.add("C - 1"); dataList.add("C - 2"); dataList.add("C - 3"); } return dataList; } ``` 在上面的代码中,我们根据左边 ListView 中当前点击item 数据来获取右边 ListView 的数据源,并根据新的数据源动态更新右边 ListView 中的 item

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值