android 小例之两列菜单关联
因为项目需要,做了个简单的菜单关联,其实很简单 左侧是个listview 选中的时候刷新右侧关联数据,类似网易新闻选择订阅页面
这里需要注意的是 在点击完左侧菜单列表的时候 直接右侧刷新会不一定出来数据,这个时候 将刷新放到adapter里面处理就可以了
废话不说 直接代码,代码里面有详细备注
// 总数据来源 选中颜色 左右列表适配器
List<TwoListData> twoListDatas = new ArrayList<TwoListData>();
private ColorStateList red;
private ColorStateList black;
private MyAdapter leftMyAdapter;
private MyAdapter rightMyAdapter;
// 左侧和右侧关联数据
List<String> leftString = new ArrayList<String>();
List<String> rightString = new ArrayList<String>();
// 右侧列表
private ListView lv_right;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two_list);
Resources resource = (Resources) getResources();
red = (ColorStateList) resource.getColorStateList(R.color.color_ff0000);
black = (ColorStateList) resource
.getColorStateList(R.color.color_000000);
ListView lv_left = (ListView) this.findViewById(R.id.lv_regison);
lv_right = (ListView) this.findViewById(R.id.lv_block);
for (int i = 0; i < 10; i++) {
twoListDatas.add(new TwoListData("left" + i));
}
leftString = getLeftData();
rightString = twoListDatas.get(0).getRightDataList();
leftMyAdapter = new MyAdapter(getLeftData());
rightMyAdapter = new MyAdapter(rightString);
lv_left.setAdapter(leftMyAdapter);
lv_right.setAdapter(rightMyAdapter);
// 左侧列表选中时候 及时刷新右侧列表关联数据
lv_left.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
leftMyAdapter.setSelected(arg2);
rightString = twoListDatas.get(arg2).getRightDataList();
rightMyAdapter.setMydata(rightString);
}
});
// 右侧列表选中 显示对应关联数据
lv_right.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
rightMyAdapter.setSelected(arg2);
Toast.makeText(
TwoListActivity.this,
"选中了左边第" + leftMyAdapter.selectedPos + "位置 右侧的第" + arg2+"位置",
Toast.LENGTH_LONG).show();
}
});
}
/**
* 获取左侧数据
*
* @return
*/
public List<String> getLeftData() {
List<String> leftDataList = new ArrayList<String>();
for (TwoListData mTwoListData : twoListDatas) {
leftDataList.add(mTwoListData.getName());
}
return leftDataList;
}
/**
* 适配器
*
* @author zxc
*
*/
public class MyAdapter extends BaseAdapter {
int selectedPos = 0;// 标识选中
public List<String> getMydata() {
return mydata;
}
public void setMydata(List<String> mydata) {
this.mydata = mydata;
notifyDataSetChanged();
}
private List<String> mydata;
public MyAdapter(List<String> mydata) {
this.mydata = mydata;
}
@Override
public int getCount() {
return mydata.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mydata.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(TwoListActivity.this)
.inflate(R.layout.adp_two_list, null);
holder.iv_title = (TextView) convertView
.findViewById(R.id.adptv_title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.iv_title.setText(mydata.get(position));
if (selectedPos == position) {
holder.iv_title.setTextColor(red);
} else {
holder.iv_title.setTextColor(black);
}
return convertView;
}
private class ViewHolder {
private TextView iv_title;
}
/**
* 标识选中并刷新
*
* @param po
*/
public void setSelected(int po) {
selectedPos = po;
notifyDataSetChanged();
}
}
数据模型如下
public class TwoListData {
private String name;// 标注
private List<String> rightDataList;
public TwoListData(String name) {
this.name = name;
setRightData(name, new Random().nextInt(15) + 1);// 随机1到15
}
/**
* 根据标注 添加右侧关联数据
*
* @param name
* @param num
*/
public void setRightData(String name, int num) {
List<String> rightDataList = new ArrayList<String>();
for (int i = 0; i < num; i++) {
rightDataList.add(name + i);
}
setRightDataList(rightDataList);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getRightDataList() {
return rightDataList;
}
public void setRightDataList(List<String> rightDataList) {
this.rightDataList = rightDataList;
}
}
效果 
浙公网安备 33010602011771号