0

Ich versuche eine Recycler-Ansicht in einem Fragment zu verwenden und verwende Firebase, um Daten aus der Datenbank zu erhalten. Das Problem ist, dass keine meiner Recycler-Ansichtsmethoden wie onCreateViewHolder, onBindViewHolder und getItemCount aufgerufen werden, wenn ich den Adapter setze. Dies kann ich bestätigen, indem ich die App im Debugger-Modus starte. Mein Fragment:Android Recycler View mit Firebase

public class Laufende Fragment erstreckt {

RecyclerView recyclerView; 
ProjectAdapter adapter; 
ArrayList<ProjectModel> project ; 

String[] project_name = new String[3]; 
String[] project_desc = new String[3]; 

    @Nullable 
    @Override 
    public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.project_layout, container, false); 
     recyclerView = (RecyclerView) v.findViewById(R.id.rv_projects); 
     project = new ArrayList<>(); 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference ref = database.getReference("projects"); 

     ref.child("ongoing").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       int i = 0; 
       for(DataSnapshot dsp: dataSnapshot.getChildren()){ 
        //System.out.println(dsp.child("name").getValue()); 
        //System.out.println(dsp.child("description").getValue()); 
        //ProjectModel p = new ProjectModel(dsp.child("name").getValue().toString(),dsp.child("description").getValue().toString()); 
        //project.add(i,p); 
        project_name[i]= dsp.child("name").getValue().toString(); 
        project_desc[i]= dsp.child("description").getValue().toString(); 
        i++; 
       } 
       System.out.println(project_name); 
       System.out.println(project_desc); 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     adapter = new ProjectAdapter(project_name, project_desc,getActivity()); 
     recyclerView.setAdapter(adapter); 
     LinearLayoutManager llm = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL, false); 
     recyclerView.setLayoutManager(llm); 
     return v; 

    } 

}

Mein RecyclerView Adapter:

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.adg.adgofficial.R; 

public class ProjectAdapter extends RecyclerView.Adapter<ProjectAdapter.ProjectViewHolder>{ 

    String[] project_name,project_desc; 
    //ArrayList<ProjectModel> project; 
    Context context; 

    public ProjectAdapter(String[] project_name,String[] project_desc ,Context context) { 

     this.project_name = project_name; 
     this.project_desc = project_desc; 
     this.context = context; 
    } 

    @Override 
    public ProjectViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(context).inflate(R.layout.projects_element,parent,false); 
     return new ProjectViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ProjectViewHolder holder, int position) { 
     holder.title.setText(project_name[position]); 
     holder.desc.setText(project_desc[position]); 
    } 


    @Override 
    public int getItemCount() { 
     return 3; 
    } 

    public static class ProjectViewHolder extends RecyclerView.ViewHolder { 

     TextView title, desc; 

     public ProjectViewHolder(View itemView) { 
      super(itemView); 
      title = (TextView) itemView.findViewById(R.id.proj_element_title); 
      desc = (TextView) itemView.findViewById(R.id.proj_element_desc); 
     } 
    } 
} 

Dieses Problem seit Wochen beunruhigen mich ist und ich kann nicht scheinen eine Lösung zu finden. Vielen Dank im Voraus für die Hilfe.

+0

Versuchen Zusatz 'adapter.notifyDataSetChanged();' nach for-Schleife in Ihrem 'OnDataChange()' – koceeng

+0

koceeng Ich habe versucht, das zu tun, aber es immer noch nicht helfen. Die Recycler-Ansicht ist noch leer. – Kronos

+0

Hat 'System.out.println (Projektname);' irgendeinen Wert angezeigt? – koceeng

Antwort

0

Versuchen Sie folgendes:

ArrayList<String> project_name = new ArrayList<>(); 
    ArrayList<String> project_desc = new ArrayList<>(); 


      ref.child("ongoing").addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 


         for(DataSnapshot dsp: dataSnapshot.getChildren()){ 

    ProjectModel p = dsp.getValue(ProjectModel.class); 
          project_name.add(p.getproject_name); 
          project_desc.add(p.getproject_desc); 

         } 
         System.out.println(project_name); 
         System.out.println(project_desc); 
     adapter = new ProjectAdapter(project_name, project_desc,getActivity()); 
       recyclerView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
+0

@Kronos Hat System.out.println (Projektname); irgendeinen Wert anzeigen? –

+0

Ja, es gab die Zeichenfolgenwerte der empfangenen Daten. – Kronos

+0

Ich habe versucht, die vorgeschlagene Antwort und es funktioniert trotzdem nicht. Es gibt immer noch ein leeres Fragment. Das habe ich in der for-Schleife geändert: ProjectModel p = new ProjectModel (dsp.child ("name"). GetValue(). ToString(), dsp.child ("description"). GetValue(). ToString()); project.add (i, p); – Kronos

Verwandte Themen