二级列表

布局文件

左右各为一个ListView

<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" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:background="#ffedcb21"
        android:gravity="center"
        android:text="二级列表"
        android:textSize="16sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <ListView
            android:id="@+id/classify_mainlist"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="20"
            android:background="#fff"
            android:cacheColorHint="#00000000"
            android:divider="#fff"
            android:dividerHeight="1px"
            android:fastScrollEnabled="true"
            android:listSelector="#00000000"
            android:scrollbars="none" />

        <ListView
            android:id="@+id/classify_morelist"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="17"
            android:background="#fff"
            android:cacheColorHint="#00000000"
            android:divider="#ffebebeb"
            android:dividerHeight="0.5px"
            android:fastScrollEnabled="true"
            android:listSelector="#00000000"
            android:scrollbars="none" />
    </LinearLayout>

</LinearLayout>

activity

左边ListView的item点击时 将位置传递给自己和右边ListVIew的adapter刷新数据


package com.example.demo.view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

import com.example.demo.Model;
import com.example.demo.R;
import com.example.demo.adapter.ClassifyMainAdapter;
import com.example.demo.adapter.ClassifyMoreAdapter;

public class ListListActivity extends Activity {

	private ListView mainlist;
	private ListView morelist;
	private List<Map<String, Object>> mainList;
	ClassifyMainAdapter mainAdapter;
	ClassifyMoreAdapter moreAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_classify);
		initModle();
		initView();
	}

	private void initView() {
		//初始化俩个listView
		mainlist = (ListView) findViewById(R.id.classify_mainlist);
		morelist = (ListView) findViewById(R.id.classify_morelist);
		
		//mainlist展示数据
		mainAdapter = new ClassifyMainAdapter(ListListActivity.this, mainList);
		mainAdapter.setSelectItem(0);
		mainlist.setAdapter(mainAdapter);

		//mainlist的item点击事件
		mainlist.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				//左边的ListView的item的点击事件触发右边的ListView的item变化
				initAdapter(Model.MORELISTTXT[position]);
				mainAdapter.setSelectItem(position);
				mainAdapter.notifyDataSetChanged();
			}
		});
		
		//设置左边ListView的选择模式为单选模式
		mainlist.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		// 一定要设置这个属性,否则ListView不会刷新
		initAdapter(Model.MORELISTTXT[0]);

		//右边ListView的item的点击事件
		morelist.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				//将点击的item的位置传递过去
				moreAdapter.setSelectItem(position);
				moreAdapter.notifyDataSetChanged();
			}
		});
	}

	//初始化右边的ListView的数据
	private void initAdapter(String[] array) {
		moreAdapter = new ClassifyMoreAdapter(this, array);
		morelist.setAdapter(moreAdapter);
		moreAdapter.notifyDataSetChanged();
	}

	//初始化数据
	private void initModle() {
		//将图标和标题文字封装到一个map集合    再将这个集合添加到 创建的 数据集合ArrayList中
		mainList = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < Model.LISTVIEWIMG.length; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("img", Model.LISTVIEWIMG[i]);
			map.put("txt", Model.LISTVIEWTXT[i]);
			mainList.add(map);
		}
	}
}

左边的ListView的适配器ClassifyMainAdapter

设置传递进来位置的方法 setSelectItem(int position)

package com.example.demo.adapter;

import java.util.List;
import java.util.Map;

import com.example.demo.R;

import android.content.Context;
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 ClassifyMainAdapter extends BaseAdapter {

	private Context context;
	private List<Map<String, Object>> list;
	private int position = 0;
	private boolean islodingimg = true;
	Holder hold;

	public ClassifyMainAdapter(Context context, List<Map<String, Object>> list) {
		this.context = context;
		this.list = list;
	}

	public ClassifyMainAdapter(Context context, List<Map<String, Object>> list,
			boolean islodingimg) {
		this.context = context;
		this.list = list;
		this.islodingimg = islodingimg;
	}

	public int getCount() {
		return list.size();
	}

	public Object getItem(int position) {
		return list.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int arg0, View view, ViewGroup viewGroup) {

		if (view == null) {
			view = View.inflate(context, R.layout.item_classify_mainlist, null);
			hold = new Holder(view);
			view.setTag(hold);
		} else {
			hold = (Holder) view.getTag();
		}
		if (islodingimg == true) {
			hold.img.setImageResource(Integer.parseInt(list.get(arg0)
					.get("img").toString()));
		}
		hold.txt.setText(list.get(arg0).get("txt").toString());
		hold.layout.setBackgroundColor(0xFFEBEBEB);
		if (arg0 == position) {
			hold.layout.setBackgroundColor(0xFFFFFFFF);
		}
		return view;
	}

	public void setSelectItem(int position) {
		this.position = position;
	}

	public int getSelectItem() {
		return position;
	}

	private static class Holder {
		LinearLayout layout;
		ImageView img;
		TextView txt;

		public Holder(View view) {
			txt = (TextView) view.findViewById(R.id.mainitem_txt);
			img = (ImageView) view.findViewById(R.id.mainitem_img);
			layout = (LinearLayout) view.findViewById(R.id.mainitem_layout);
		}
	}
}

右边的ListView的适配器ClassifyMoreAdapter


package com.example.demo.adapter;

import com.example.demo.R;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ClassifyMoreAdapter extends BaseAdapter {

	private Context context;
	private String[] text_list;
	private int position = 0;
	Holder hold;

	public ClassifyMoreAdapter(Context context, String[] text_list) {
		this.context = context;
		this.text_list = text_list;
	}

	public int getCount() {
		return text_list.length;
	}

	public Object getItem(int position) {
		return text_list[position];
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int arg0, View view, ViewGroup viewGroup) {

		if (view == null) {
			view = View.inflate(context, R.layout.item_classify_morelist, null);
			hold = new Holder(view);
			view.setTag(hold);
		} else {
			hold = (Holder) view.getTag();
		}
		hold.txt.setText(text_list[arg0]);
		hold.txt.setTextColor(0xFF666666);
		if (arg0 == position) {
			hold.txt.setTextColor(0xFFFF8C00);
		}
		return view;
	}

	public void setSelectItem(int position) {
		this.position = position;
	}

	private static class Holder {
		TextView txt;

		public Holder(View view) {
			txt = (TextView) view.findViewById(R.id.moreitem_txt);
		}
	}
}


布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#efeff4"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/header_layout"
        android:layout_width="fill_parent"
        android:layout_height="56dp"
        android:background="#ef56cb" >

        <ImageButton
            android:id="@+id/header_setting_imagebutton"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="18dp"
            android:background="@drawable/icon_back" />

        <TextView
            android:id="@+id/header_title_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="ExpandableListView"
            android:textColor="#fff"
            android:textSize="24sp" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >

        <ExpandableListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_margin="10dp"
            android:childDivider="#c8c7cc"
            android:divider="@null"
            android:dividerHeight="1px"
            android:gravity="center"
            android:groupIndicator="@null"
            android:listSelector="#00000000"
            android:scrollbars="none" />
    </LinearLayout>

</LinearLayout>

activity

package com.example.demo.view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.example.demo.Model;
import com.example.demo.R;
import com.example.demo.adapter.ExpandableListAdapter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.Toast;

public class ExpandableListViewActivity extends Activity {

	private ExpandableListView expandableListView;

	private ExpandableListAdapter adapter;

	private List<Map<String, Object>> list;
	private String[][] child_text_array;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_expandable_listview);

		init();
		initModle();
		setListener();
	}

	private void init() {
		expandableListView = (ExpandableListView) findViewById(R.id.list);

		child_text_array = Model.EXPANDABLE_MORELIST_TXT;
	}

	private void setListener() {
		//group点击监听
		expandableListView.setOnGroupClickListener(new OnGroupClickListener() {

			@Override
			public boolean onGroupClick(ExpandableListView parent, View v,
					int groupPosition, long id) {
				return false;
			}
		});

		expandableListView.setOnChildClickListener(new OnChildClickListener() {

			@Override
			public boolean onChildClick(ExpandableListView parent, View v,
					int groupPosition, int childPosition, long id) {
				Toast.makeText(getApplicationContext(),
						child_text_array[groupPosition][childPosition],
						Toast.LENGTH_SHORT).show();
				return false;
			}
		});
	}

	private void initModle() {
		list = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < Model.EXPANDABLE_LISTVIEW_TXT.length; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("img", Model.EXPANDABLE_LISTVIEW_IMG[i]);
			map.put("txt", Model.EXPANDABLE_LISTVIEW_TXT[i]);
			list.add(map);
		}
		//将group标题 数据  和child数据传递过去
		adapter = new ExpandableListAdapter(this, list, child_text_array);
		expandableListView.setAdapter(adapter);
	}

}

适配器

group_title.setCompoundDrawablesWithIntrinsicBounds(0, 0,R.drawable.group_down, 0); 这个方法时在TextVIew的左上右下设置一个图片

package com.example.demo.adapter;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.demo.R;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

	private String[][] child_text_array;
	private Context context;

	private List<Map<String, Object>> list;

	public ExpandableListAdapter(Context context,
			List<Map<String, Object>> list, String[][] child_text_array) {
		this.context = context;
		this.list = list;//group标题数据
		this.child_text_array = child_text_array;//child数据
	}

	/**
	 * 获取一级标签总数
	 */
	@Override
	public int getGroupCount() {
		return list.size();
	}

	/**
	 * 获取一级标签下二级标签的总数
	 */
	@Override
	public int getChildrenCount(int groupPosition) {
		return child_text_array[groupPosition].length;
	}

	/**
	 * 获取一级标签内容
	 */
	@Override
	public Object getGroup(int groupPosition) {
		return list.get(groupPosition).get("txt");
	}

	/**
	 * 获取一级标签下二级标签的内容
	 */
	@Override
	public Object getChild(int groupPosition, int childPosition) {
		return child_text_array[groupPosition][childPosition];
	}

	/**
	 * 获取一级标签的ID
	 */
	@Override
	public long getGroupId(int groupPosition) {
		return groupPosition;
	}

	/**
	 * 获取二级标签的ID
	 */
	@Override
	public long getChildId(int groupPosition, int childPosition) {
		return childPosition;
	}

	/**
	 * 指定位置相应的组视图
	 */
	@Override
	public boolean hasStableIds() {
		return true;
	}

	/**
	 * 对一级标签进行设置
	 */
	@Override
	public View getGroupView(int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {
		convertView = (LinearLayout) LinearLayout.inflate(context,
				R.layout.item_group_layout, null);

		ImageView group_icon = (ImageView) convertView
				.findViewById(R.id.img_icon);
		TextView group_title = (TextView) convertView
				.findViewById(R.id.group_title);
		if (isExpanded) {
			group_title.setCompoundDrawablesWithIntrinsicBounds(0, 0,
					R.drawable.group_down, 0);
		} else {
			group_title.setCompoundDrawablesWithIntrinsicBounds(0, 0,
					R.drawable.group_up, 0);
		}
		group_icon.setImageResource(Integer.parseInt(list.get(groupPosition)
				.get("img").toString()));
		group_title.setText(list.get(groupPosition).get("txt").toString());

		return convertView;
	}

	/**
	 * 对一级标签下的二级标签进行设置
	 */
	@Override
	public View getChildView(int groupPosition, int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {
		convertView = (RelativeLayout) RelativeLayout.inflate(context,
				R.layout.item_child_layout, null);
		TextView child_text = (TextView) convertView
				.findViewById(R.id.child_text);

		child_text.setText(child_text_array[groupPosition][childPosition]);

		return convertView;
	}

	/**
	 * 当选择子节点的时候,调用该方法
	 */
	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		return true;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值