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;
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联动的基本实现,很简单欢迎大家一起学习