Firebase API + Android Studio : Database 処理の基本設定 MainActivity 拡張子:txtvbswsfjsphpjavahtmlutf8sjis 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"); } }); } } MyArrayAdapter 拡張子:txtvbswsfjsphpjavahtmlutf8sjis 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; } }
Firebase API + Android Studio : Database 処理の基本設定
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"); } }); } }
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; } }
拡張子:txtvbswsfjsphpjavahtmlutf8sjis 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); } }); } }
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); } }); } }
拡張子:txtvbswsfjsphpjavahtmlutf8sjis public class JsonData { private String text; private String subject; private String name; private String datetime; public JsonData(){} 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; } }
public class JsonData { private String text; private String subject; private String name; private String datetime; public JsonData(){} 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; } }
拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?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>
<?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>
拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?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>
<?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>
拡張子: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" 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>
<?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>