解説ページ ExpandableListView を使用して、タップした時に明細データ表示する tools.jar Google Gson JSON データ MainActivity 拡張子:txtvbswsfjsphpjavahtmlutf8sjis package lightbox.july.expandablelistviewsimpledata; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; import com.google.gson.Gson; import jp.android.work.Tools; public class MainActivity extends AppCompatActivity { private JsonDataList json; private MyExpandableListAdapter adapter; private ExpandableListView elv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 開くリストビューのインスタンス elv = (ExpandableListView) MainActivity.this.findViewById(R.id.expandableListView); // JSON データ(文字列) String data_url = "https://lightbox.sakura.ne.jp/homepage/demo/data/csvtype/json.php"; Tools.callHttpGet(data_url, "utf-8", new Tools.OnAsyncTaskListener() { @Override public void onAsyncTaskListener(String s) { Gson gson = new Gson(); // デシリアライズ json = gson.fromJson(s, JsonDataList.class); adapter = new MyExpandableListAdapter(json); elv.setAdapter(adapter); } }); } // 開くリストビュー用のアダプタ private class MyExpandableListAdapter extends BaseExpandableListAdapter{ private JsonDataList json; public MyExpandableListAdapter(JsonDataList json) { this.json= json; } // ****************************** // 親データの表示 // ( 実際は データの subject ) // ****************************** @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { // 現在の View の取得 LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.group_view, null); } // Adapter にセットされているこのポジションの MyData を取得 JsonData data = (JsonData)adapter.getGroup(groupPosition); // group_view にデータをセット TextView tv = (TextView) rowView.findViewById(R.id.textView); tv.setText(data.subject); return rowView; } // ****************************** // 子データの表示 // ( 実際は データの 残りの項目 ) // ****************************** @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { // 現在の View の取得 LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.child_view, null); } // Adapter にセットされているこのポジションの MyData を取得 JsonData data = (JsonData)adapter.getGroup(groupPosition); // child_view にデータをセット TextView tv2 = (TextView) rowView.findViewById(R.id.textView2); tv2.setText(data.name); TextView tv3 = (TextView) rowView.findViewById(R.id.textView3); tv3.setText(data.datetime); TextView tv4 = (TextView) rowView.findViewById(R.id.textView4); tv4.setText(data.text); return rowView; } @Override public int getGroupCount() { return json.item.length; } @Override public int getChildrenCount(int groupPosition) { return 1; } @Override public Object getGroup(int groupPosition) { return json.item[groupPosition]; } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getGroupId(int groupPosition) { return 0; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } } private class JsonData { String text; String subject; String name; String datetime; } private class JsonDataList { JsonData[] item; } }
解説ページ ExpandableListView を使用して、タップした時に明細データ表示する
package lightbox.july.expandablelistviewsimpledata; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; import com.google.gson.Gson; import jp.android.work.Tools; public class MainActivity extends AppCompatActivity { private JsonDataList json; private MyExpandableListAdapter adapter; private ExpandableListView elv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 開くリストビューのインスタンス elv = (ExpandableListView) MainActivity.this.findViewById(R.id.expandableListView); // JSON データ(文字列) String data_url = "https://lightbox.sakura.ne.jp/homepage/demo/data/csvtype/json.php"; Tools.callHttpGet(data_url, "utf-8", new Tools.OnAsyncTaskListener() { @Override public void onAsyncTaskListener(String s) { Gson gson = new Gson(); // デシリアライズ json = gson.fromJson(s, JsonDataList.class); adapter = new MyExpandableListAdapter(json); elv.setAdapter(adapter); } }); } // 開くリストビュー用のアダプタ private class MyExpandableListAdapter extends BaseExpandableListAdapter{ private JsonDataList json; public MyExpandableListAdapter(JsonDataList json) { this.json= json; } // ****************************** // 親データの表示 // ( 実際は データの subject ) // ****************************** @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { // 現在の View の取得 LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.group_view, null); } // Adapter にセットされているこのポジションの MyData を取得 JsonData data = (JsonData)adapter.getGroup(groupPosition); // group_view にデータをセット TextView tv = (TextView) rowView.findViewById(R.id.textView); tv.setText(data.subject); return rowView; } // ****************************** // 子データの表示 // ( 実際は データの 残りの項目 ) // ****************************** @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { // 現在の View の取得 LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.child_view, null); } // Adapter にセットされているこのポジションの MyData を取得 JsonData data = (JsonData)adapter.getGroup(groupPosition); // child_view にデータをセット TextView tv2 = (TextView) rowView.findViewById(R.id.textView2); tv2.setText(data.name); TextView tv3 = (TextView) rowView.findViewById(R.id.textView3); tv3.setText(data.datetime); TextView tv4 = (TextView) rowView.findViewById(R.id.textView4); tv4.setText(data.text); return rowView; } @Override public int getGroupCount() { return json.item.length; } @Override public int getChildrenCount(int groupPosition) { return 1; } @Override public Object getGroup(int groupPosition) { return json.item[groupPosition]; } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getGroupId(int groupPosition) { return 0; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } } private class JsonData { String text; String subject; String name; String datetime; } private class JsonDataList { JsonData[] item; } }
activity_main.xml 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?xml version="1.0" encoding="utf-8"?> <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="lightbox.july.expandablelistviewsimpledata.MainActivity"> <ExpandableListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/expandableListView" android:layout_alignParentTop="true" android:layout_alignParentStart="true"/> </RelativeLayout> group_view.xml 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" android:padding="10dp" android:textSize="20dp" android:textStyle="bold" android:textColor="#000000"/> </LinearLayout> child_view.xml 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView2" android:padding="5dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView3" android:padding="5dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView4" android:padding="5dp"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="lightbox.july.expandablelistviewsimpledata.MainActivity"> <ExpandableListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/expandableListView" android:layout_alignParentTop="true" android:layout_alignParentStart="true"/> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" android:padding="10dp" android:textSize="20dp" android:textStyle="bold" android:textColor="#000000"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView2" android:padding="5dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView3" android:padding="5dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView4" android:padding="5dp"/> </LinearLayout>