2017-01-17 6 views
0

FirebaseListAdapterを使用してListViewにデータを挿入しようとしています。 私は、データを結合するために、次のリスナーを追加しました:FirebaseListAdapterで結合クエリからデータをバインドするにはどうすればいいですか?

mWODsReference.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      final String wod_key = dataSnapshot.getKey(); 
      System.out.println("The wod key is " + wod_key); 
      mDatabase.child("wod_rounds/" + wod_key).addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
         modelWODRound post = postSnapshot.getValue(modelWODRound.class); 
         String round_key = postSnapshot.getKey(); 
         System.out.println("Round key and time cap are " + round_key + ": " + post.getRoundlimit().toString()); 
         DatabaseReference refRE = mDatabase.child("round_exercises").child(round_key); 
         refRE.addValueEventListener(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
            String exercise_key = postSnapshot.getKey(); 
            System.out.println("Round exercises are " + exercise_key); 
           } 
          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }); 

        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

私はそれのprintlnは私に正しい値を示している見ることができます。 文字列round_keyとexercise_keyをandroid.R.layout.two_line_list_itemのフィールドにバインドするにはどうすればよいですか?

+0

をリストビュー内のデータを移入するには、あなたがのためにレイアウトを作成する必要がありますリストとアダプタ。 SOには多くの例があるので、難しくありません。また、CamelCaseを使用して変数名を変更することを提案したいと思います。 round_keyのように、roundKeyとexercise_keyはexerciseKeyになります。最初の文字は小文字です。 –

+0

@JaniceKartikaこれらの結合された値をDatabaseReferenceからFirebaseListAdapterに送信する方法についての質問がほとんどです。それらがアダプタに入ると、それらをアイテムレイアウトの特定のテキストビューにバインドする際に問題はありません。 – Dmitriy

答えて

0

アダプタ用のカスタムクラスを作成します。

public class ListAdapter extends ArrayAdapter<CustomItem> { 

public ListAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
} 

public ListAdapter(Context context, int resource, List<Item> items) { 
    super(context, resource, items); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View v = convertView; 

    if (v == null) { 
     LayoutInflater vi; 
     vi = LayoutInflater.from(getContext()); 
     v = vi.inflate(R.layout.two_line_list_item, null); 
    } 

    CustomItem p = getItem(position); 
    if (p != null) { 
      TextView tt2 = (TextView) v.findViewById(R.id.round_key); 
      TextView tt3 = (TextView) v.findViewById(R.id.exercise_key); 


      if (tt2 != null) { 
       tt2.setText(p.getRoundKey()); 
      } 

      if (tt3 != null) { 
       tt3.setText(p.getExerciseKey()); 
      } 
     } 

     return v; 
    } 
} 

カスタムItemクラス:MainActivityで

public class CustomItem { 

    public String round_key; 
    public String exercuse_key; 

    public CustomItem() { 

    } 

    public CustomItem(String r_key, String e_key) 
    { 
     this.round_key=r_key; 
     this.exercise_key=e_key; 
    } 

    public String getRoundKey(){ 
     return this.round_key; 
    } 

    public String getExerciseKey(){ 
     return this.exercise_key; 
    } 
} 

private List<CustomItem> customItem; 
private ListAdapter adapter; 
private CustomItem mItem; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    listView = (ListView)findViewById(R.id.listview1); 

    customItem = new ArrayList<CustomItem>(); 

    getFirebaseData(); 

    listView.setAdapter(adapter); 
} 

private void getFirebaseData(){ 
     mWODsReference.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      final String wod_key = dataSnapshot.getKey(); 
      System.out.println("The wod key is " + wod_key); 
      mDatabase.child("wod_rounds/" + wod_key).addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
         modelWODRound post = postSnapshot.getValue(modelWODRound.class); 
         String round_key = postSnapshot.getKey(); 
         System.out.println("Round key and time cap are " + round_key + ": " + post.getRoundlimit().toString()); 
         DatabaseReference refRE = mDatabase.child("round_exercises").child(round_key); 
         refRE.addValueEventListener(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
            String exercise_key = postSnapshot.getKey(); 
            System.out.println("Round exercises are " + exercise_key); 
            mItem = new CustomItem(round_key,exercise_key); 
            customItem.add(mItem); 
            adapter.notifyDataSetChanged(); 
           } 
          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }); 

        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 
関連する問題