原理:
左右两个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的联动