0

私はフラグメント内でリサイクラビューを使用しようとしており、Firebaseを使用してデータベースからデータを取得しています。問題は、アダプタを設定するときにonCreateViewHolder、onBindViewHolder、getItemCountなどのリサイクラビューメソッドが呼び出されないことです。これは私がデバッガモードでアプリを実行することで確認することができます。 マイフラグメント:FirebaseベースのAndroid Recyclerビュー

パブリッククラス継続的なフラグメント{

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; 

    } 

}

マイRecyclerViewアダプタを拡張:

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); 
     } 
    } 
} 

この問題は、数週間のための私を悩まされていて、私はできませんそれに対する解決策を見つけるようです。助けを前にありがとう。

+0

'adapter.notifyDataSetChangedを()追加してみてくださいを;' forループあなた 'OnDataChangeの()' – koceeng

+0

koceeng内部の後、私はそれをやってみましたが、それはまだ助けていません。 Recyclerビューはまだ空です。 – Kronos

+0

'System.out.println(project_name);'はどんな値を表示しましたか? – koceeng

答えて

0

このお試しください:

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はSystem.out.printlnを行った(project_name);任意の値を表示しますか? –

+0

はい、受信したデータの文字列値が返されました。 – Kronos

+0

私はあなたに答えを提案していますが、まだ動作していません。それはまだ空白の断片を与えています。これはforループのdatasnapshotで変更されたものです:ProjectModel p = new ProjectModel(dsp.child( "name")。getValue()。toString()、dsp.child( "description")。getValue()。toString() ); project.add(i、p); – Kronos

関連する問題