コメント |
@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 |