DoubleListView效果


以上是效果图

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

先上布局

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
	@ViewById
	ListView lv_category_list_main;

	// 右边的listview(或者叫二级列表的listview)
	@ViewById
	ListView lv_category_list_secend;

	// 左边的适配器
	CategoryMainAdapter mainAdapter;
	// 右边的适配器
	CategorySecendAdapter secendAdapter;
	// 准备存放数据的list集合---每个item元素是一个map集合
	List<Map<String, Object>> mainData = new ArrayList<Map<String, Object>>();

	@AfterViews
	void 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事件
	 */
	@ItemClick
	void 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;
	}

	@Override
	public int getCount() {
		return data.size();
	}

	@Override
	public Object getItem(int position) {
		return data.get(position);
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}

	@Override
	public 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) {//当前为选中的item
			holder.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;
	}

	@Override
	public int getCount() {
		return data.length;
	}

	@Override
	public Object getItem(int position) {
		return data[position];
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}

	@Override
	public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值