1

Der Code unten Ich habe anscheinend alles getan, aber die Recyclerview wird gerade nicht ausgefüllt.Recyclerview zeigt nichts, irgendwelche Ideen? Verwenden von FirestoreUI RecyclerAdapter

Ich habe sogar das Log OnDateChange, um zu sehen, ob es angerufen wird, und es wurde einmal auf dem LogCat aufgerufen, nachdem ich es auf meinem Galaxy S6 ausgeführt habe. Außerdem ist die Datenbank öffentlich. So

RecyclerView chat_view; 
EditText message_text; 

CollectionReference reference = FirebaseFirestore.getInstance().collection("stage2"); 
Query query = reference.orderBy("timestamp"); 
FirestoreRecyclerAdapter<ChatMessage,ChatHolder> adapter=null; 




@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chat); 
    //initializing, called below 
    init(); 
} 





private FirestoreRecyclerAdapter<ChatMessage,ChatHolder> newAdapter() { 
    final FirestoreRecyclerOptions options = new FirestoreRecyclerOptions.Builder<ChatMessage>() 
      .setQuery(query,ChatMessage.class) 
      .setLifecycleOwner(this)     
          .build(); 

    return new FirestoreRecyclerAdapter<ChatMessage, ChatHolder>(options) { 
     @Override 
     public ChatHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_item,parent,false); 
      //if(((ChatMessage)options.getSnapshots().getSnapshot(viewType)).) 
      return new ChatHolder(view); 
     } 

     @Override 
     protected void onBindViewHolder(ChatHolder holder, int position, ChatMessage model) {   




      //displaying the message and users into the recyclerview 
      holder.user_msg.setText(model.getMessage()); 
      holder.user_date.setText(model.getDate()); 
      holder.user_name.setText(model.getName()); 

     } 




     @Override 
     public void onDataChanged() { 
      Log.d("TAG", "YESSIR"); 

     } 

     @Override 
     public void onError(FirebaseFirestoreException e) { 
      super.onError(e); 
     } 
    }; 




} 

private void init(){ 
    chat_view = (RecyclerView) findViewById(R.id.chat_view); 
    chat_view.setVerticalScrollBarEnabled(true); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(this); 

    chat_view.setLayoutManager(layoutManager); 
    adapter = newAdapter(); 
    chat_view.setAdapter(adapter); 




    message_text = (EditText) findViewById(R.id.message_text); 
    message_text.setEnabled(appUtils.isSignedIn()); 
    findViewById(R.id.send_button).setEnabled(appUtils.isSignedIn()); 




} 

, da haben wir es, ich habe keine Ahnung, was das Problem an dieser Stelle sein könnte. Ich verwende auch die neueste Firestore-UI-Abhängigkeit.

Antwort

0

Es scheint, dass Sie alles Notwendige getan haben. Verwenden FirestoreRecycleroptions und Aufblasen des Layouts in onCreateViewHolder.

Damit FirestoreRecyclerAdapter die Daten zur Aktivität haben können, müssen Sie alle Änderungen in onStart() abhören, die nach onCreate() sind. Auch in onStop können Sie aufhören zu hören.

@Override 
public void onStart() { 
    super.onStart(); 
    adapter.startListening(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    adapter.stopListening(); 
} 
+0

Oh, ich habe das getan. Ich habe sowohl diese und die LifecycleOwner-Methode für RecyclerOptions und das gleiche Problem ausprobiert. –

+0

@BaldricNguena versuchen und verschieben Sie Ihre CollectionReference und Abfrage und Ihre Firestore.GetInstance nach setContentView nur deklarieren sie als globale Variablen, aber initialisieren sie nicht vor setContentView –

+0

Ich fand es heraus, dort Fehler bei der Abfrage = reference.orderBy ("timestamp"); –

Verwandte Themen