ChildItem.java
1 2 3 4 5 6 7 8 9 10 |
package com.phaisarn.myapplication; public class ChildItem { public String text; public ChildItem(String text) { this.text = text; } } |
GroupViewHolder.java
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.phaisarn.myapplication; import android.view.View; import android.widget.TextView; public class GroupViewHolder { TextView textView; public GroupViewHolder(View view) { textView = (TextView) view.findViewById(R.id.group_textView); } } |
ChildViewHolder.java
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.phaisarn.myapplication; import android.view.View; import android.widget.TextView; public class ChildViewHolder { TextView textView; public ChildViewHolder(View view) { textView = (TextView) view.findViewById(R.id.child_textView); } } |
GroupItem.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.phaisarn.myapplication; import java.util.ArrayList; public class GroupItem { public String text; public ArrayList<ChildItem> childItems; public GroupItem(String text, ArrayList<ChildItem> childItems) { this.text = text; this.childItems = childItems; } } |
layout/child_item.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?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:descendantFocusability="blocksDescendants" android:orientation="vertical"> <TextView android:id="@+id/child_textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="7dp" android:paddingLeft="40dp" android:paddingTop="7dp" android:textSize="16sp" /> </LinearLayout> |
layout/group_item.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?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:background="#def" android:orientation="vertical"> <TextView android:id="@+id/group_textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="40dp" android:paddingTop="10dp" android:textSize="20sp" /> </LinearLayout> |
CustomAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
package com.phaisarn.myapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import java.util.ArrayList; public class CustomAdapter extends BaseExpandableListAdapter { private Context mContext; private ArrayList<GroupItem> mGroupItems; private GroupViewHolder mGroupHolder; private ChildViewHolder mChildHolder; public CustomAdapter(Context context, ArrayList<GroupItem> items) { mContext = context; mGroupItems = items; } @Override public int getGroupCount() { return mGroupItems.size(); } //ให้ gPos => groupPosition, cPos => childPosition @Override public int getChildrenCount(int gPos) { return mGroupItems.get(gPos).childItems.size(); } @Override public Object getGroup(int gPos) { return mGroupItems.get(gPos); } @Override public Object getChild(int gPos, int cPos) { return null; } @Override public long getGroupId(int gPos) { return gPos; } @Override public long getChildId(int gPos, int cPos) { return cPos; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int gPos, int cPos) { return true; } @Override public View getGroupView(int gPos, boolean isLast, View view, ViewGroup viewGroup) { if (view == null) { LayoutInflater inflater = LayoutInflater.from(mContext); view = inflater.inflate(R.layout.group_item, viewGroup, false); mGroupHolder = new GroupViewHolder(view); view.setTag(mGroupHolder); } else { mGroupHolder = (GroupViewHolder) view.getTag(); } GroupItem groupItemInfo = (GroupItem) getGroup(gPos); mGroupHolder.textView.setText(groupItemInfo.text); return view; } @Override public View getChildView(int gPos, int cPos, boolean isLast, View view, ViewGroup viewGroup) { if (view == null) { LayoutInflater inflater = LayoutInflater.from(mContext); view = inflater.inflate(R.layout.child_item, viewGroup, false); mChildHolder = new ChildViewHolder(view); view.setTag(mChildHolder); } else { mChildHolder = (ChildViewHolder) view.getTag(); } ArrayList<ChildItem> childItems = mGroupItems.get(gPos).childItems; mChildHolder.textView.setText(childItems.get(cPos).text); return view; } } |
content_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/content_main" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".MainActivity" tools:showIn="@layout/activity_main"> <ExpandableListView android:id="@+id/expandableListView" android:layout_width="match_parent" android:layout_height="match_parent" android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" android:listSelector="#ffc" /> </LinearLayout> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
package com.phaisarn.myapplication; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.ExpandableListView; import android.widget.Toast; import java.util.ArrayList; import java.util.Arrays; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); final ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandableListView); final ArrayList<GroupItem> groupArray = new ArrayList<>(); ArrayList<ChildItem> childArray; GroupItem groupItem; String groupName; groupName = "Asia"; childArray = new ArrayList<>(); childArray.addAll(Arrays.asList( new ChildItem("Thailand"), new ChildItem("Japan"), new ChildItem("Korea"))); groupItem = new GroupItem(groupName, childArray); groupArray.add(groupItem); groupName = "Europe"; childArray = new ArrayList<>(); childArray.addAll(Arrays.asList( new ChildItem("UK"), new ChildItem("France"), new ChildItem("Germany"), new ChildItem("Spain"))); groupItem = new GroupItem(groupName, childArray); groupArray.add(groupItem); groupName = "America"; childArray = new ArrayList<>(); childArray.addAll(Arrays.asList( new ChildItem("USA"), new ChildItem("Canada"), new ChildItem("Mexico"))); groupItem = new GroupItem(groupName, childArray); groupArray.add(groupItem); groupName = "Africa"; childArray = new ArrayList<>(); childArray.addAll(Arrays.asList( new ChildItem("Nigeria"), new ChildItem("Cameroon"), new ChildItem("Morocco"))); groupItem = new GroupItem(groupName, childArray); groupArray.add(groupItem); groupName = "Latin"; childArray = new ArrayList<>(); childArray.addAll(Arrays.asList( new ChildItem("Brazil"), new ChildItem("Argentina"), new ChildItem("Peru"), new ChildItem("Chile"))); groupItem = new GroupItem(groupName, childArray); groupArray.add(groupItem); CustomAdapter adapter = new CustomAdapter(this, groupArray); expandableListView.setAdapter(adapter); expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView exp, View view, int i, int i1, long l) { //ใช้เมธอดของคลาส GroupItem และ ChildItem String item = groupArray.get(i).childItems.get(i1).text; Toast.makeText(getBaseContext(), item, Toast.LENGTH_SHORT).show(); return true; } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } |