ExpandableListAdapter.java
- Spoiler:
import java.util.HashMap;
import java.util.List;
import android.content.Context;
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 ExpandableListAdapter extends BaseExpandableListAdapter{
private Context context;
private List<ItemsParent> listItemsParents;
// header titles
// child data in format of header title, child title
private HashMap<ItemsParent, List<ItemsChild>> hashMapDataChild;
public ExpandableListAdapter(Context context, List<ItemsParent> listDataHeader,
HashMap<ItemsParent, List<ItemsChild>> listChildData) {
this.context = context;
this.listItemsParents = listDataHeader;
this.hashMapDataChild = listChildData;
}
@Override
public Object getChild(int groupPosition, int childPosititon) {
return this.hashMapDataChild.get(this.listItemsParents.get(groupPosition))
.get(childPosititon);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// _listChild =(ArrayList<ItemsChild>)hashMapDataChild.get(groupPosition);
ItemsChild itemsChild = (ItemsChild) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.items_child, null);
}
TextView tvChild = (TextView) convertView.findViewById(R.id.tvChild);
ImageView ivChild = (ImageView) convertView.findViewById(R.id.ivChild);
tvChild.setText(itemsChild.getStringChild());
ivChild.setImageDrawable(itemsChild.getDrawableChild());
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this.hashMapDataChild.get(this.listItemsParents.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return this.listItemsParents.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.listItemsParents.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) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.items_parent, null);
}
ImageView ivParent = (ImageView) convertView
.findViewById(R.id.ivParent);
ivParent.setImageDrawable(listItemsParents.get(groupPosition).getDrawableParent());
TextView tvParent = (TextView) convertView.findViewById(R.id.tvParent);
tvParent.setText(listItemsParents.get(groupPosition).getStringParent());
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
- Spoiler:
- import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
public class ActivityExpandlistView extends Activity {
private ExpandableListAdapter expandableListAdapter;
private ExpandableListView expandableListView;
private List<ItemsParent> listItemsParents;
private HashMap<ItemsParent, List<ItemsChild>> hashMapDataChild;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo_expandlist_view);
expandableListView = (ExpandableListView) findViewById(R.id.expandableList);
// hien thi icon indicator ben phai
DisplayMetrics metrics;
int width;
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
width = metrics.widthPixels;
expandableListView.setIndicatorBounds(width - GetDipsFromPixel(50),
width - GetDipsFromPixel(10));
NhapDuLieu();
// setting list adapter
expandableListAdapter = new ExpandableListAdapter(this,
listItemsParents, hashMapDataChild);
expandableListView.setAdapter(expandableListAdapter);
// cai dat su kien click
// Listview Group click listener
expandableListView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
return false;
}
});
// Listview Group expanded listener
expandableListView
.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(
getApplicationContext(),
listItemsParents.get(groupPosition)
+ " Expanded", Toast.LENGTH_SHORT)
.show();
}
});
// Listview Group collasped listener
expandableListView
.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(
getApplicationContext(),
listItemsParents.get(groupPosition)
+ " Collapsed", Toast.LENGTH_SHORT)
.show();
}
});
// Listview on child click listener
expandableListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
Toast.makeText(
getApplicationContext(),
listItemsParents.get(groupPosition)
+ " : "
+ hashMapDataChild.get(
listItemsParents.get(groupPosition))
.get(childPosition), Toast.LENGTH_SHORT)
.show();
return false;
}
});
}
public void NhapDuLieu() {
listItemsParents = new ArrayList<ItemsParent>();
hashMapDataChild = new HashMap<ItemsParent, List<ItemsChild>>();
// nhap thong tin cho parent
for (int i = 0; i < 3; i++) {
ItemsParent itemsParent = new ItemsParent();
if (i == 0) {
itemsParent.setDrawableParent(getResources().getDrawable(
R.drawable.firefox));
itemsParent.setStringParent("Fire fox");
} else if (i == 1) {
itemsParent.setDrawableParent(getResources().getDrawable(
R.drawable.smile));
itemsParent.setStringParent("Smile");
} else if (i == 2) {
itemsParent.setDrawableParent(getResources().getDrawable(
R.drawable.sad));
itemsParent.setStringParent("Sad");
}
listItemsParents.add(i,itemsParent);
}
// nhap thong tin cho child
List<ItemsChild> lisItemsChildsFirefox = new ArrayList<ItemsChild>();
for (int i = 0; i < 2; i++) {
ItemsChild itemsChild = new ItemsChild();
itemsChild.setStringChild("Firefox" + i);
itemsChild.setDrawableChild(getResources().getDrawable(
R.drawable.firefox));
lisItemsChildsFirefox.add(itemsChild);
}
List<ItemsChild> lisItemsChildsSmile = new ArrayList<ItemsChild>();
for (int i = 0; i < 2; i++) {
ItemsChild itemsChild = new ItemsChild();
itemsChild.setStringChild("Smile" + i);
itemsChild.setDrawableChild(getResources().getDrawable(
R.drawable.smile));
lisItemsChildsSmile.add(itemsChild);
}
List<ItemsChild> lisItemsChildsSad = new ArrayList<ItemsChild>();
for (int i = 0; i < 2; i++) {
ItemsChild itemsChild = new ItemsChild();
itemsChild.setStringChild("Sad" + i);
itemsChild.setDrawableChild(getResources().getDrawable(
R.drawable.sad));
lisItemsChildsSad.add(itemsChild);
}
hashMapDataChild.put(listItemsParents.get(0), lisItemsChildsFirefox);
hashMapDataChild.put(listItemsParents.get(1), lisItemsChildsSmile);
hashMapDataChild.put(listItemsParents.get(2), lisItemsChildsSad);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.demo_expandlist_view, menu);
return true;
}
public int GetDipsFromPixel(float pixels) {
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
return (int) (pixels * scale + 0.5f);
}
}
- Spoiler:
import android.graphics.drawable.Drawable;
public class ItemsChild {
private Drawable drawableChild;
private String stringChild;
public Drawable getDrawableChild() {
return drawableChild;
}
public void setDrawableChild(Drawable drawableChild) {
this.drawableChild = drawableChild;
}
public String getStringChild() {
return stringChild;
}
public void setStringChild(String stringChild) {
this.stringChild = stringChild;
}
}
- Spoiler:
import android.graphics.drawable.Drawable;
public class ItemsParent {
private Drawable drawableParent;
private String stringParent;
public Drawable getDrawableParent() {
return drawableParent;
}
public void setDrawableParent(Drawable drawableParent) {
this.drawableParent = drawableParent;
}
public String getStringParent() {
return stringParent;
}
public void setStringParent(String stringParent) {
this.stringParent = stringParent;
}
}
- Code:
<RelativeLayout 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"
tools:context=".ActivityExpandlistView" >
<ExpandableListView
android:id="@+id/expandableList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</ExpandableListView>
</RelativeLayout>
- Code:
<?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:paddingLeft="20dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ivChild"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tvChild"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
- Code:
<?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="horizontal" >
<ImageView
android:id="@+id/ivParent"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tvParent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>