5

アプリの多くの場所でライブラリのを使用してFirebaseRecyclerViewAdapterいます。com.firebaseui:firebase-ui:0.2.0私の質問は、クエリ引数が多数の「インデックス」エントリ値 (Map.Entry) を返す状況でそれを適用する方法です。

Firebase のドキュメント ( https://www.firebase.com/docs/android/guide/structuring-data.html ) に示されているように、データ構造をフラットに保つためにインデックスを使用しています。これは、これらのインデックスを ViewHolder にバインドする必要がある状況につながります。populate ビュー メソッド内で、インデックスのキーを使用してデータを取得し、ビューホルダーに入力します。

アダプターの作成に問題があります。ブール値/文字列 Map.Entry の場合に「modelClass」引数を定義する方法がわかりません。

mAdapter = new FirebaseRecyclerViewAdapter<Map.Entry<String, Boolean>, ItemViewHolder>(???.class, R.layout.my_card, ItemViewHolder.class, getItemIndexQuery(mKey) ) {
...
}
4

3 に答える 3

10

あなたの値はBooleanではなくMapです。したがって、コメントは正しいです。値の型にBoolean/を指定する必要があります。Boolean.classキーを検索できるようにするには、FirebaseUI-Android 0.2.2 にアップグレードする必要があります。そのリリースpopulateViewHolder(VH, T, int)では、項目の位置をパラメーターとして取得するオーバーロードを追加しました。これで、アイテムのキーを調べることができます。

これが JSON 構造であるとします。

{
  "items": {
    "pushid1": "Fri Jan 01 2016 16:40:54 GMT-0800 (PST)",
    "pushid2": "Fri Jan 01 2016 16:41:07 GMT-0800 (PST)",
    "pushid3": "Fri Jan 01 2016 16:41:25 GMT-0800 (PST)",
    "pushid4": "Fri Jan 01 2016 16:41:37 GMT-0800 (PST)",
    "pushid5": "Fri Jan 01 2016 16:42:04 GMT-0800 (PST)"
  },
  "index": {
    "pushid1": true,
    "pushid3": true,
    "pushid5": true
  }
}

そのため、日付/時刻を表す文字列を保存し、これらのアイテムのサブセットを選択するためのインデックスを用意しています。

インデックスからノードをロードし、それらのノードが参照するアイテムをロードして、ビューに表示できるようになりました。

FirebaseRecyclerViewAdapter<Boolean, ItemViewHolder> adapter = 
    new FirebaseRecyclerViewAdapter<Boolean, ItemViewHolder>(
        Boolean.class, android.R.layout.two_line_list_item, ItemViewHolder.class, ref.child("index")){
    protected void populateViewHolder(final ItemViewHolder viewHolder, Boolean model, int position) {
        String key = this.getRef(position).getKey();
        ref.child("items").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
            public void onDataChange(DataSnapshot dataSnapshot) {
                String date = dataSnapshot.getValue(String.class);
                ((TextView)viewHolder.itemView.findViewById(android.R.id.text1)).setText(date);
            }

            public void onCancelled(FirebaseError firebaseError) { }
        });
    }
};

画面上の出力:

3 つの日付を表示する Android アプリ

完全なコードについては、このリポジトリActivity34559171の を参照してください。

于 2016-01-02T01:30:11.320 に答える