Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

ExpandableListView со значками в заголовках

Продолжение темы со значками, на этот раз значки будут в заголовках списка. Достаточно настроить разметку для этой категории.

Подготовим разметку для групп.

res/layout/exp_list_group_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="wrap_content"
     android:orientation="horizontal"
    android:padding="8dp" >

    <ImageView
        android:id="@+id/groupimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Разметка для дочерних элементов.

res/layout/exp_list_child_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="55dp"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="italic" />

</LinearLayout>

Класс для адаптера.


package ru.alexanderklimov.test;

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyExpandableAdapter extends BaseExpandableListAdapter {

	private Context context;
	private List<String> listGroup;
	private HashMap<String, List<String>> listChild;

	public MyExpandableAdapter(Context c, List<String> lg,
			HashMap<String, List<String>> lc) {
		context = c;
		listGroup = lg;
		listChild = lc;
	}

	@Override
	public Object getChild(int groupPosition, int childPosition) {
		return listChild.get(listGroup.get(groupPosition)).get(childPosition);
	}

	@Override
	public long getChildId(int groupPosition, int childPosition) {
		return childPosition;
	}

	@Override
	public View getChildView(int groupPosition, int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {

		if (convertView == null) {
			LayoutInflater infalInflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			convertView = infalInflater.inflate(R.layout.exp_list_child_item,
					null);
		}

		TextView textViewItem = (TextView) convertView.findViewById(R.id.item);

		String text = (String) getChild(groupPosition, childPosition);

		textViewItem.setText(text);
		return convertView;
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		return listChild.get(listGroup.get(groupPosition)).size();
	}

	@Override
	public Object getGroup(int groupPosition) {
		return listGroup.get(groupPosition);
	}

	@Override
	public int getGroupCount() {
		return listGroup.size();
	}

	@Override
	public long getGroupId(int groupPosition) {
		return groupPosition;
	}

	@Override
	public View getGroupView(int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {

		if (convertView == null) {
			LayoutInflater infalInflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			convertView = infalInflater.inflate(R.layout.exp_list_group_item,
					null);
		}

		String textGroup = (String) getGroup(groupPosition);

		// get application resource/drawable not in Activity class, using
		// context
		Resources contextResources = context.getResources();
		Drawable groupDrawable = contextResources
				.getDrawable(R.drawable.ic_android_cat);
		// Set ImageView
		ImageView groupImage = (ImageView) convertView
				.findViewById(R.id.groupimage);
		groupImage.setImageDrawable(groupDrawable);

		TextView textViewGroup = (TextView) convertView
				.findViewById(R.id.group);
		textViewGroup.setText(textGroup);

		return convertView;
	}

	@Override
	public boolean hasStableIds() {
		return false;
	}

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		return true;
	}
}

Код для активности.


package ru.alexanderklimov.test;

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

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.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.app.Activity;

public class MainActivity extends Activity {

	private MyExpandableAdapter mAdapter;
	private ExpandableListView mExpandableListView;
	private List<String> mListForGroup;
	private HashMap<String, List<String>> mMapForChild;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);
		setTitle("ExpandableListView");

		mExpandableListView = (ExpandableListView) findViewById(R.id.myexpandablelistview);

		initData();

		mAdapter = new MyExpandableAdapter(this, mListForGroup, mMapForChild);

		mExpandableListView.setAdapter(mAdapter);

		mExpandableListView.setOnChildClickListener(myOnChildClickListener);
		mExpandableListView.setOnGroupClickListener(myOnGroupClickListener);
		mExpandableListView
				.setOnGroupCollapseListener(myOnGroupCollapseListener);
		mExpandableListView.setOnGroupExpandListener(myOnGroupExpandListener);

	}

	private void initData() {
		mListForGroup = new ArrayList<String>();
		mMapForChild = new HashMap<String, List<String>>();
		
		mListForGroup.add("Васька");
		mListForGroup.add("Барсик");
		mListForGroup.add("Мурзик");
		mListForGroup.add("Рыжик");

		List<String> listGroupA = new ArrayList<String>();
		listGroupA.add("Умный");
		listGroupA.add("Ловкий");
		listGroupA.add("Голодный");

		List<String> listGroupB = new ArrayList<String>();
		listGroupB.add("Хитрый");
		listGroupB.add("Красивый");
		listGroupB.add("Пушистый");

		List<String> listGroupC = new ArrayList<String>();
		listGroupC.add("Ласковый");
		listGroupC.add("Добрый");
		listGroupC.add("Прыгучий");
		
		List<String> listGroupD = new ArrayList<String>();
		listGroupD.add("Талантливый");
		listGroupD.add("Великолепный");
		listGroupD.add("Спортивный");

		mMapForChild.put(mListForGroup.get(0), listGroupA);
		mMapForChild.put(mListForGroup.get(1), listGroupB);
		mMapForChild.put(mListForGroup.get(2), listGroupC);
		mMapForChild.put(mListForGroup.get(3), listGroupD);
	}

	OnChildClickListener myOnChildClickListener = new OnChildClickListener() {

		@Override
		public boolean onChildClick(ExpandableListView parent, View v,
				int groupPosition, int childPosition, long id) {

			return true;
		}
	};

	OnGroupClickListener myOnGroupClickListener = new OnGroupClickListener() {

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

			return false;
		}
	};

	OnGroupCollapseListener myOnGroupCollapseListener = new OnGroupCollapseListener() {

		@Override
		public void onGroupCollapse(int groupPosition) {
			// group collapse at groupPosition
		}
	};

	OnGroupExpandListener myOnGroupExpandListener = new OnGroupExpandListener() {

		@Override
		public void onGroupExpand(int groupPosition) {
			// group expand at groupPosition
		}
	};
}

В разметку главной активности добавьте ExpandableListView.

Результат.

ExpandableListView

Реклама