因为项目需要,做了个简单的菜单关联,其实很简单 左侧是个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;
} }

  

效果 

android 小例之两列菜单关联的更多相关文章

  1. 微信小程序picker组件两列关联使用方式

    在使用微信小程序picker组件时候,可以设置属性   mode = multiSelector   意为多列选择,关联选择,当第一列发生改变时侯,第二列甚至第三列发生相应的改变.但是官方文档上给的只 ...

  2. android:json解析的两个工具:Gson和Jackson的使用小例子

    1.简介 json是android与服务器通信过程中常用的数据格式,例如,如下是一个json格式的字符串: {"address":"Nanjing"," ...

  3. Flex 布局 (两个div居中自适应 宽度变小变一列,宽度够就是两列)

    https://www.runoob.com/w3cnote/flex-grammar.html display: flex; justify-content: center; align-items ...

  4. 小程序 picker 多列选择器 数据动态获取

    需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 teach_area_id 字段关联 其各班级数据 ...

  5. Android实现下拉导航选择菜单效果

    本文介绍在Android中如何实现下拉导航选择菜单效果.   关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左 ...

  6. JQuery 实现两列等高并自适应高度

    想要使用 JQuery 实现两列等高并自适应高度,其实也很简单,原理就是取得左右两边的高度,然后判断这个值,把大的值赋给小的就行了.看代码: $(document).ready(function() ...

  7. Android系列之UI组件----Menu菜单

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

  9. hadoop学习;block数据块;mapreduce实现样例;UnsupportedClassVersionError异常;关联项目源代码

    对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例 为了方便查看源代码,关联导入源代码的项目 先前的项目导入源代码是关联了源代码文件 block数据块,在配置 ...

随机推荐

  1. mysql申请账户

    INSERT INTO mysql.user set Host='%',user='alipay',password=password('alipay'),Select_priv='Y',Insert ...

  2. "The connection for the USB device '###' was unsuccessful. The device is currently in use"

    一.问题描述 1.情景描述 笔者的物理主机系统是“windows7 64位”,想使用“摄像头录像大师”.这个软件在录制视频的过程中,需要调用windows自带的"windows media ...

  3. IntraWeb.v14.0.32安装及破解指南

    一.下载 首先从这里下载14.0.32版本的IntraWeb: 链接:http://pan.baidu.com/s/1c0rjnKO 密码:8kv2 二.卸载旧版 1. 我的Delphi版本是XE6, ...

  4. PAT (Basic Level) 1004. 成绩排名 (20)

    读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...

  5. Codeforces Round #205 (Div. 2) : C

    感觉像是一个数位dp,高位的1如果不选的话,前面低位的数都可以选:不然只能选择为1的数: 代码: #include<iostream> #include<algorithm> ...

  6. 如何从 Xcode 控制台输出 JavaScript 的 log?

    调试 UIWebView 中的 JavaScript 一直以来都是很痛苦的一件事.通常我们会通过下面的方法调试 HTML 和 JavaScript. 1.第一种,使用桌面浏览器调试.大多数现代浏览器都 ...

  7. 李洪强iOS开发之-环信02_iOS SDK 介绍及导入

    李洪强iOS开发之-环信02_iOS SDK 介绍及导入 iOS SDK 介绍及导入 iOS SDK 介绍 环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架.包括以下几个部分: SD ...

  8. Keil C51程序调试过程

    用Keil C51编写程序时,经常需要调试,如果不是经常用这个软件的话,很容易忘记这些调试步骤,现在举一个例子“验证延迟函数delay()使其延迟的时间为500ms”说明. 源程序写完后,就可以调试了 ...

  9. css的定位机制

    牛腩新闻发不系统中遇到了CSS(Cascading style sheets),第一次接触,比较陌生还!因为CSS很多关于元素定位的问题,并且很多情况下元素的位置以像素精度计.一个不小心就很头疼,为此 ...

  10. BZOJ1600: [Usaco2008 Oct]建造栅栏

    1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 825  Solved: 473[Submit][Sta ...