ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: ListView + カスタム ArrayAdapter + ViewSwitcher + Firebase API ( リストビューテンプレート 3) : Android Studio
名前: lightbox
処理選択
パスワード

件名 ListView + カスタム ArrayAdapter + ViewSwitcher + Firebase API ( リストビューテンプレート 3) : Android Studio
名前 lightbox
コメント
@SHOW
http://logicalerror.seesaa.net/article/442045166.html(Firebase API + Android Studio : Database 処理の基本設定)
@END

https://lh3.googleusercontent.com/-hy6vQzqRQOY/V_uAlGT-TvI/AAAAAAAAhBo/hwTfirl1mNAx61IUgohvLXYNAnmFdUy0gCHM/s500/Screenshot_1476100152.png

[[MainActivity]]
@DIV
public class MainActivity extends AppCompatActivity {

	public static int FIRST_PAGE = 0;
	public static int NEXT_PAGE = 1;
	private ListView listview;
	private ViewSwitcher vs;
	private FirebaseDatabase database;
	private DatabaseReference mDatabase;

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

		// Firebase Database 用
		database = FirebaseDatabase.getInstance();
		mDatabase = database.getReference();

		// 複数画面処理
		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);
			}
		});

		// Firebase の item ツリーを name でソートして取得
		mDatabase.child("item").orderByChild("name")
			.addListenerForSingleValueEvent(new ValueEventListener() {
			@Override
			public void onDataChange(DataSnapshot dataSnapshot) {
				if ( dataSnapshot.exists() ) {

					// 空の ArrayList
					ArrayList<JsonData> listData = new ArrayList<JsonData>();

					// name でソートされたデータを dataSnapshot より取得
					Iterator<DataSnapshot> child = dataSnapshot.getChildren().iterator();
					while(child.hasNext()) {
						DataSnapshot next = child.next();
						// JsonData に変換
						JsonData jsonData = next.getValue(JsonData.class);

						// ArrayList に追加
						listData.add(jsonData);
					}

					// アダプタを作成して、データをセット
					MyArrayAdapter adapter
						= new MyArrayAdapter(MainActivity.this,R.layout.list_item);
					//listData は name でソートされた ArrayList
					adapter.addAll(listData);

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

				}
				else {
					Log.i("lightbox","データを読み込めませんでした");
				}
			}

			@Override
			public void onCancelled(DatabaseError databaseError) {
				Log.i("lightbox","onCancelled");

			}
		});

	}

}
@END


[[MyArrayAdapter]]
@DIV
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;
	}

}
@END