/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Продолжение темы со значками, на этот раз значки будут в заголовках списка. Достаточно настроить разметку для этой категории.
Подготовим разметку для групп.
<?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>
Разметка для дочерних элементов.
<?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.
Результат.