zoukankan      html  css  js  c++  java
  • 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;
    	}
    	
    }
    

      

    效果 

  • 相关阅读:
    N 种仅仅使用 HTML/CSS 实现各类进度条的方式
    使用 CSS 轻松实现一些高频出现的奇形怪状按钮
    通过jdb命令连接远程调试的方法
    (转)Python中asyncio与aiohttp入门教程
    (转)从0到1,Python异步编程的演进之路
    (转)python︱用asyncio、aiohttp实现异步及相关案例
    (转)Python 如何仅用5000 行代码,实现强大的 logging 模块?
    (转)python的dict()字典数据类型的方法详解以及案例使用
    (转)Python Async/Await入门指南
    (转)Python运维自动化psutil 模块详解(超级详细)
  • 原文地址:https://www.cnblogs.com/kukum/p/android_demo_twolist.html
Copyright © 2011-2022 走看看