DoubleListView效果

来源:互联网 发布:袁隆平 诺贝尔奖 知乎 编辑:程序博客网 时间:2024/04/30 02:42


以上是效果图

------------------------------------代码开始-----------------------------------

先上布局

activity_category_list.xml

<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="vertical" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="horizontal" >        <ListView            android:id="@+id/lv_category_list_main"            android:layout_height="match_parent"            android:layout_width="0dp"            android:layout_weight="1"            android:background="#FF4040"            android:divider="@null"            android:scrollbars="none" />        <ListView            android:id="@+id/lv_category_list_secend"            android:layout_height="match_parent"            android:layout_width="0dp"            android:layout_weight="2"            android:background="#FFFFFF"            android:divider="@null"/>    </LinearLayout></LinearLayout>
category_main_list_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/ll_item_category_main"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center_vertical"    android:orientation="horizontal">    <ImageView        android:id="@+id/iv_item_category_main"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingBottom="21dp"        android:paddingLeft="10dp"        android:paddingTop="21dp"         android:src="@drawable/logo"/>    <TextView        android:id="@+id/tv_item_category_main"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingBottom="19dp"        android:paddingLeft="10dp"        android:paddingTop="19dp"        android:text="热门分类"        android:textColor="#000000"        android:textSize="18sp" /></LinearLayout>
category_secend_list_item.xml

<?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"    android:paddingBottom="0dp"    android:paddingLeft="10dp" >    <LinearLayout        android:id="@+id/ll_item_category_secend"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center_vertical"        android:paddingBottom="0dp" >        <TextView            android:id="@+id/tv_item_category_secend"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center_vertical"            android:paddingBottom="18.5dp"            android:paddingTop="18dp"            android:text="全部分类"            android:textColor="#666666"            android:textSize="17sp" />    </LinearLayout></LinearLayout>

准备工具类

Constant.java

package com.example.doublelistview;public class Constant {// 第一个listview的图片数据数组public static int[] LISTVIEWIMG = new int[] {R.drawable.ic_category_2147483648, R.drawable.ic_category_10,R.drawable.ic_category_20, R.drawable.ic_category_30,R.drawable.ic_category_45, R.drawable.ic_category_50,R.drawable.ic_category_55, R.drawable.ic_category_60,R.drawable.ic_category_65, R.drawable.ic_category_70,R.drawable.ic_category_80, R.drawable.ic_category_none };// 第一个listview的文本数据数组public static String[] LISTVIEWTXT = new String[] { "热门分类", "美食", "购物","休闲娱乐", "运动健身", "丽人", "结婚", "酒店", "爱车", "亲子", "生活服务", "家装" };// 第二个listview的文本数据public static String[][] MORELISTTXT = {{ "全部分类", "小吃快餐", "咖啡厅", "电影院", "KTV", "茶馆", "足疗按摩", "超市/便利店","银行", "经济型酒店", "景点/郊游", "公园", "美发" },{ "全部美食", "小吃快餐", "西餐", "火锅", "北京菜", "川菜", "日本", "面包甜点", "粤菜","韩国料理", "自助餐", "浙江菜", "云南菜", "湘菜", "东南亚菜", "西北菜", "鲁菜","东北菜", "素菜", "新疆菜", "海鲜", "清真菜", "贵州菜", "湖北菜", "其他" },{ "全部购物", "综合商场", "服饰鞋包", "超市/便利店", "特色集市", "品牌折扣店", "眼镜店", "珠宝饰品","化妆品", "运动户外", "食品茶酒", "书店", "数码产品", "药店", "京味儿购物", "亲子购物","花店", "家具建材", "更多购物场所" },{ "全部休闲娱乐", "咖啡厅", "KTV", "景点/郊游", "电影院", "酒吧", "公园", "温泉", "文化艺术","足疗按摩", "洗浴", "茶馆", "游乐游艺", "密室", "采摘/农家乐", "桌面游戏", "台球馆","DIY手工坊", "休闲网吧", "真人CS", "棋牌室", "轰趴馆", "私人影院", "更多休闲娱乐" },{ "全部运动健身", "健身中心", "游泳馆", "瑜伽", "羽毛球馆", "台球馆", "舞蹈", "体育场馆","高尔夫场", "网球场", "武术场馆", "篮球场", "保龄球馆", "足球场", "乒乓球馆","更多体育运动" },{ "全部丽人", "美发", "美容/SPA", "齿科", "美甲", "化妆品", "瑜伽", "瘦身纤体", "舞蹈","个性写真", "整形" },{ "全部结婚", "婚纱摄影", "婚宴酒店", "婚纱礼服", "婚庆公司", "婚戒首饰", "个性写真", "彩妆造型","婚礼小礼品", "婚礼跟拍", "婚车租赁", "司仪主持", "婚房装修", "更多婚礼服务" },{ "全部酒店", "经济型酒店", "五星级酒店", "度假村", "四星级酒店", "三星级酒店", "农家院","公寓式酒店", "青年旅社", "精品酒店", "更多酒店住宿" },{ "全部爱车", "维修保养", "驾校", "停车场", "4S店/汽车销售", "加油站", "配件/车饰", "汽车租赁","汽车保险" },{ "全部亲子", "亲子摄影", "幼儿教育", "亲子游乐", "孕产护理", "亲子购物", "更多亲子服务" },{ "全部生活服务", "医院", "银行", "齿科", "宠物", "培训", "快照/冲印", "学校", "旅行社","购物网站", "干洗店", "家政", "奢侈品护理", "商务楼", "小区", "更多生活服务" },{ "全部家装", "家具家装", "家用电器", "建材", "家装卖场", "装修设计" } };}
CategoryListActivity.java

package com.example.doublelistview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.androidannotations.annotations.AfterViews;import org.androidannotations.annotations.Click;import org.androidannotations.annotations.EActivity;import org.androidannotations.annotations.ItemClick;import org.androidannotations.annotations.ViewById;import android.app.Activity;import android.view.View;import android.widget.ListView;@EActivity(R.layout.activity_category_list)public class CategoryListActivity extends Activity {// 左边的listview@ViewByIdListView lv_category_list_main;// 右边的listview(或者叫二级列表的listview)@ViewByIdListView lv_category_list_secend;// 左边的适配器CategoryMainAdapter mainAdapter;// 右边的适配器CategorySecendAdapter secendAdapter;// 准备存放数据的list集合---每个item元素是一个map集合List<Map<String, Object>> mainData = new ArrayList<Map<String, Object>>();@AfterViewsvoid init() {// 初始化主列表的数据initMainData();// 初始主adapter(参数有数据、环境)mainAdapter = new CategoryMainAdapter(mainData, this);lv_category_list_main.setAdapter(mainAdapter);// 显示二级分类(初始化先显示二维数据(MORELISTTXT)的第一个元素)String[] data = Constant.MORELISTTXT[0];secendAdapter = new CategorySecendAdapter(data, this);lv_category_list_secend.setAdapter(secendAdapter);}/** * 初始化左边listview的数据(每一行或者每个item就是一个map键值对) */private void initMainData() {for (int i = 0; i < Constant.LISTVIEWIMG.length; i++) {Map<String, Object> map = new HashMap<String, Object>();map.put("img", Constant.LISTVIEWIMG[i]);map.put("txt", Constant.LISTVIEWTXT[i]);mainData.add(map);}}/** * 在一级列表中添加点击每个条目的dian事件 */@ItemClickvoid lv_category_list_main(int position) {int selectedPos = mainAdapter.getSelectedPos();if (position != selectedPos) {// 更新主列表mainAdapter.setSelectedPos(position);mainAdapter.notifyDataSetChanged();// 通知Main ListView更新// 更新二级列表String[] data = Constant.MORELISTTXT[position];secendAdapter.setData(data);secendAdapter.notifyDataSetChanged();// 通知Secend ListView更新lv_category_list_secend.setSelection(0);// 滑动到顶部,// 必须在notifyDataSetChanged()之后}}}

CategoryMainAdapter.java

package com.example.doublelistview;import java.util.List;import java.util.Map;import android.content.Context;import android.graphics.Color;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class CategoryMainAdapter extends BaseAdapter {private List<Map<String, Object>> data;private Context context;private int selectedPos = 0; // 选中的item的下标public CategoryMainAdapter(List<Map<String, Object>> data, Context context) {this.data = data;this.context = context;}public int getSelectedPos() {return selectedPos;}public void setSelectedPos(int selectedPos) {this.selectedPos = selectedPos;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {convertView = View.inflate(context,R.layout.category_main_list_item, null);holder = new ViewHolder();holder.imageView = (ImageView) convertView.findViewById(R.id.iv_item_category_main);holder.textView = (TextView) convertView.findViewById(R.id.tv_item_category_main);holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.ll_item_category_main);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}Map<String, Object> map = data.get(position);holder.imageView.setImageResource((Integer) map.get("img"));holder.textView.setText(map.get("txt").toString());if(selectedPos==position) {//当前为选中的itemholder.linearLayout.setBackgroundColor(Color.WHITE);} else {holder.linearLayout.setBackgroundColor(Color.TRANSPARENT);}return convertView;}class ViewHolder {ImageView imageView;TextView textView;LinearLayout linearLayout;}}
CategorySecendAdapter.java

package com.example.doublelistview;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class CategorySecendAdapter extends BaseAdapter {String[] data;Context context;public CategorySecendAdapter(String[] data, Context context) {this.data = data;this.context = context;}@Overridepublic int getCount() {return data.length;}@Overridepublic Object getItem(int position) {return data[position];}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = View.inflate(context,R.layout.category_secend_list_item, null);}TextView textView = (TextView) convertView.findViewById(R.id.tv_item_category_secend);textView.setText(data[position]);return convertView;}//设置新的数据public void setData(String[] data) {this.data = data;}}



0 0
原创粉丝点击