ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
ExpandableListView を使用して、タイトルデータをクリックしたら明細をその下に表示する
日時: 2016/07/11 20:59
名前: lightbox





tools.jar



Google Gson
JSON データ



MainActivity
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;
	}

}
メンテナンス

画面定義 ( No.1 )
日時: 2016/07/11 20:24
名前: lightbox


日時: 2016/07/11 20:24
名前: lightbox
activity_main.xml
<?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
<?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
<?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>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス