ListView多级联动

ListView联动

好久没有学习了,年后一直在忙家里边的事情,感觉再不写代码,自己就不是一个合格的程序员了,所以研究了一下listview的联动。
首先看一下listview联动的布局,很简单,首先是两个listview的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="#ffffff"
    tools:context="cn.apppay.com.twolistview.MainActivity">
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical"
    >
    <ListView
        android:id="@+id/listview_one"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@null"
        android:scrollbars="none"></ListView>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
</LinearLayout>
<ListView
    android:id="@+id/listview_two"
    android:layout_width="0dp"
    android:layout_weight="3"
    android:scrollbars="none"
    android:layout_marginLeft="2dp"
    android:divider="@null"
    android:layout_height="match_parent"></ListView>
</LinearLayout>
然后看一下两个item的布局,第一个item:
<?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="match_parent"
    android:orientation="vertical">
<TextView
    android:gravity="center"
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="我是条目一"/>
</LinearLayout>
第二个item:
<?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="match_parent"
    android:orientation="horizontal">
    <ImageView

        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@mipmap/ic_launcher"/>
<TextView
    android:layout_marginTop="10dp"
    android:id="@+id/tv_two"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="我是内容1"/>
</LinearLayout>
当布局完成后,就可以开始进行写代码了,首先看一下两个adapter的写法
很简单就是传统的listview的adapter编写
package cn.apppay.com.twolistview;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.zip.Inflater;

/**
 * Created by Administrator on 2017/3/1.
 */

public class ListViewOneAdapter extends BaseAdapter {
    private  String[] mMenus;
    private Context context;
    private int selectIndex;



    public void setSelectIndex(int index) {
        this.selectIndex = index;
    }

    public ListViewOneAdapter(String[] mMenus, Context context, int selectIndex) {
        this.mMenus = mMenus;
        this.context = context;
        this.selectIndex = selectIndex;
    }

    @Override
    public int getCount() {
        return mMenus.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView==null){
            convertView= View.inflate(context,R.layout.item_one,null);
            holder=new ViewHolder();
            holder.tv= (TextView) convertView.findViewById(R.id.tv);
            convertView.setTag(holder);
        }else{
            holder= (ViewHolder) convertView.getTag();
        }

        LinearLayout.LayoutParams selectParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        //左上右下
        selectParams.setMargins(1,1,0,0);

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        params.setMargins(1,1,1,0);

        if(position==selectIndex){
            holder.tv.setBackgroundColor(Color.parseColor("#ffffff"));
            holder.tv.setLayoutParams(selectParams);
        }else {
            holder.tv.setBackgroundColor(Color.parseColor("#dedede"));
            holder.tv.setLayoutParams(params);
        }


        holder.tv.setText(mMenus[position]);
        return convertView;
    }
    class ViewHolder{
        TextView tv;
    }
}
package cn.apppay.com.twolistview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * Created by Administrator on 2017/3/1.
 */

public class ListViewTwoAdapter extends BaseAdapter {
    private String [] [] allData;
    private Context context;

    public void setSelectIndex(int selectIndex) {
        this.selectIndex = selectIndex;
    }

    private int selectIndex;

    public ListViewTwoAdapter(String[][] allData, Context context, int selectIndex) {
        this.allData = allData;
        this.context = context;
        this.selectIndex = selectIndex;
    }

    @Override
    public int getCount() {
        return allData[selectIndex].length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        ViewHolder vh;
        if(convertView==null){
            convertView=View.inflate(context, R.layout.item_two,null);
            vh=new ViewHolder();
            vh.tv= (TextView) convertView.findViewById(R.id.tv_two);
            convertView.setTag(vh);
        }else {
            vh= (ViewHolder) convertView.getTag();
        }

        vh.tv.setText(allData[selectIndex][position]);

        return convertView;
    }

    public void setIndex(int index){
        selectIndex=index;
    }

    class ViewHolder{
        TextView tv;
    }
}
最后就是我们的MainActivity里边的具体实现了
package cn.apppay.com.twolistview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private int selectIndex=0;

    private static final String[] mMenus = { "常用分类", "服饰内衣", "鞋靴", "手机",
            "家用电器", "数码", "电脑办公", "个护化妆", "图书"};
    private String[] strs1={"常用分类1","常用分类2","常用分类3","常用分类4","常用分类5","常用分类6","常用分类7","常用分类8","常用分类9","常用分类10"};
    private String[] strs2={"服饰内衣1","服饰内衣2","服饰内衣3","服饰内衣4","服饰内衣5","服饰内衣6","服饰内衣7","服饰内衣8","服饰内衣9","服饰内衣10","服饰内衣11","服饰内衣12","服饰内衣13","服饰内衣14","服饰内衣15","服饰内衣16"};
    private String[] strs3={"鞋靴1","鞋靴2","鞋靴3","鞋靴4","鞋靴5","鞋靴6"};
    private String[] strs4={"手机1","手机2","手机3","手机4"};
    private String[] strs5={"家用电器1","家用电器2","家用电器3","家用电器4","家用电器5","家用电器6","家用电器7","家用电器8"};
    private String[][] allData={strs1,strs2,strs3,strs4,strs5,strs1,strs2,strs3,strs4,strs5,strs1,strs2,strs3,strs4,strs5};
    private ListView listView_one;
    private ListView listView_two;
    private ListViewOneAdapter listViewOneAdapter;
    private ListViewTwoAdapter listViewTwoAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

    }

    private void initView() {
        listView_one = (ListView) findViewById(R.id.listview_one);
        listView_two = (ListView) findViewById(R.id.listview_two);
        listViewOneAdapter = new ListViewOneAdapter(mMenus, this, selectIndex);
        listViewTwoAdapter = new ListViewTwoAdapter(allData, this, selectIndex);
        listView_one.setAdapter(listViewOneAdapter);
        listView_two.setAdapter(listViewTwoAdapter);
        listView_one.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    selectIndex=i;
                //把下标传过去然后刷新adapter
                listViewOneAdapter.setSelectIndex(selectIndex);
                listViewOneAdapter.notifyDataSetChanged();
                listView_one.smoothScrollToPositionFromTop(i,0);
                listViewTwoAdapter.setIndex(i);
                listView_two.setAdapter(listViewTwoAdapter);

            }
        });
        listView_two.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this,allData[selectIndex][i],Toast.LENGTH_SHORT).show();
            }
        });
    }
}
以上就是listview联动的基本实现,很简单欢迎大家一起学习
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值