コメント |
https://lh3.googleusercontent.com/-hy6vQzqRQOY/V_uAlGT-TvI/AAAAAAAAhBo/hwTfirl1mNAx61IUgohvLXYNAnmFdUy0gCHM/s500/Screenshot_1476100152.png
@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;
private ActivityMainBinding binding;
private NextPage nextPage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// Firebase Database 用
database = FirebaseDatabase.getInstance();
mDatabase = database.getReference();
// 複数画面処理
vs = (ViewSwitcher) MainActivity.this.findViewById(R.id.viewSwitcher);
// 次画面処理
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);
binding.setJdata( json );
nextPage.setData( json );
// 画面移動
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
@HTML
<span id="MyArrayAdapter"></span>
@HEND
[[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) {
// この行用の Data Binding 用
ListItemBinding binding;
if (convertView == null) {
// 現在の View の取得
// getContext() で super で渡されたものを取得できます
LayoutInflater inflater
= (LayoutInflater) MyArrayAdapter.this.getContext().getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
// Data Binding 用のインスタンスを作成
binding = DataBindingUtil.inflate(inflater, mResource, parent, false);
}
else {
// Data Binding 用のインスタンスを取得
binding = DataBindingUtil.getBinding(convertView);
}
// アダプターより行データを取得
JsonData json = MyArrayAdapter.this.getItem(position);
binding.setJdata(json);
// Data Binding 用のインスタンスより、必要な View( 画面 ) を取得して返す
return binding.getRoot();
}
}
@END |