ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
ListView + カスタム ArrayAdapter + ViewSwitcher ( リストビューテンプレート 2) : Android Studio
日時: 2016/10/10 18:43
名前: lightbox



tools.jar



Google Gson
JSON データ
<Map<String, JsonData>>

Firebase の ルートに item を作成して、そのツリーに対して以下のデータをインポートします

https://lightbox.sakura.ne.jp/demo/firebase/jsondata.json


MainActivity
拡張子:
public class MainActivity extends AppCompatActivity {

	public static int FIRST_PAGE = 0;
	public static int NEXT_PAGE = 1;
	private ListView listview;
	private ViewSwitcher vs;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 複数画面処理
		vs = (ViewSwitcher) MainActivity.this.findViewById(R.id.viewSwitcher);
		// 次画面処理
		NextPage nextPage = new NextPage(MainActivity.this);
		// イベント登録
		nextPage.initAction();

		// リストビューの取得
		listview = (ListView) MainActivity.this.findViewById(R.id.listView);
		// リストビューの行をタップした時の処理
		listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

				// アダプターを取得
				MyArrayAdapter adapter = (MyArrayAdapter)parent.getAdapter();
				// 行データを取得
				JsonData json = (JsonData)adapter.getItem(position);

				// 次画面に直接データ表示
				View include1 = MainActivity.this.findViewById(R.id.include1);
				TextView textView = (TextView) include1.findViewById(R.id.textView);
				textView.setText(json.getText());

				// 画面移動
				vs.setDisplayedChild(MainActivity.NEXT_PAGE);
			}
		});

		// JSON データの URL ( Firebase を使用 )
		String json_url = "https://freebase-654b7.firebaseio.com/item.json?print=pretty";
		// tools.jar の static メソッド
		Tools.callHttpGet(json_url, "utf-8", new Tools.OnAsyncTaskListener() {
			@Override
			public void onAsyncTaskListener(String s) {

				// JSON データをデシリアライズ
				Gson gson = new Gson();
				Type myMap = new TypeToken<Map<String, JsonData>>(){}.getType();
				Map<String,JsonData> map = gson.fromJson(s, myMap);

				// アダプタを作成して、データをセット
				MyArrayAdapter adapter
					= new MyArrayAdapter(MainActivity.this,R.layout.list_item);
				// map.values() から ArrayList を作成してセット
				adapter.addAll(new ArrayList<JsonData>(map.values()));

				// リストビューにデータを表示
				listview.setAdapter(adapter);

			}
		});
	}


}
MyArrayAdapter
拡張子:
public class MyArrayAdapter extends ArrayAdapter<JsonData> {

	// JsonData を格納する、この処理専用の
	// ArrayAdapter のカスタマイズ

	// コンストラクタで渡された画面の保存
	private int mResource;

	public MyArrayAdapter(Context context, int resource) {
		super(context, resource);
		// ArrayAdapter でも、このようにして保存して利用してます
		mResource = resource;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		if (convertView == null) {
			// 現在の View の取得
			// getContext() で super で渡されたものを取得できます
			LayoutInflater inflater
				= (LayoutInflater) MyArrayAdapter.this.getContext().getSystemService
				(Context.LAYOUT_INFLATER_SERVICE);
			// super で渡されたものは取得できないので自前で用意します
			convertView = inflater.inflate(mResource, null);
		}

		// アダプターより行データを取得
		JsonData json = MyArrayAdapter.this.getItem(position);

		// 画面にデータをセット
		TextView tv;

		// Subject
		tv	= (TextView) convertView.findViewById(R.id.textItem1);
		tv.setText(json.getSubject());

		// Name
		tv = (TextView) convertView.findViewById(R.id.textItem2);
		tv.setText(json.getName());

		// 行の画面をシステムに返す
		return convertView;
	}

}
メンテナンス

NextPage ( No.1 )
日時: 2016/10/10 17:16
名前: lightbox


日時: 2016/10/10 17:16
名前: lightbox


拡張子:
public class NextPage {

	private MainActivity mainActivity;
	private ViewSwitcher vs;

	public NextPage(MainActivity mainActivity) {
		this.mainActivity = mainActivity;
	}

	public void initAction(){

		// 複数画面処理
		vs = (ViewSwitcher) mainActivity.findViewById(R.id.viewSwitcher);

		// activity_next.xml の 親 view です
		View include1 = mainActivity.findViewById(R.id.include1);

		// *****************************************
		// 戻るボタン
		// *****************************************
		Button backButton = (Button)include1.findViewById(R.id.backButton);
		backButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// 最初の画面へ移動
				vs.setDisplayedChild(MainActivity.FIRST_PAGE);
			}

		});

	}
}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
JsonData ( No.2 )
日時: 2016/10/10 17:18
名前: lightbox
拡張子:
public class JsonData {

	String text;
	String subject;
	String name;
	String datetime;

	public String getSubject() {
		return subject;
	}
	public String getName() {
		return name;
	}
	public String getText() {
		return text;
	}
	public String getDatetime() {
		return datetime;
	}

	@Override
	public String toString() {
		return this.subject;
	}
}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
activity_main.xml ( No.3 )
日時: 2016/10/10 17:18
名前: lightbox
拡張子:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <ViewSwitcher
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewSwitcher">

        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listView"/>

        <include
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            layout="@layout/activity_next"
            android:id="@+id/include1"/>

    </ViewSwitcher>

</LinearLayout>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
activity_next.xml ( No.4 )
日時: 2016/10/10 21:48
名前: lightbox
拡張子:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="戻る"
        android:id="@+id/backButton"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:id="@+id/textView"/>
        </LinearLayout>

    </ScrollView>

</LinearLayout>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
list_item.xml ( No.5 )
日時: 2016/10/10 17:20
名前: lightbox
拡張子:
<?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"
              android:padding="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/textItem1" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textItem2"
        android:layout_marginTop="5dp"/>

</LinearLayout>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス