Search code examples
androidandroid-recyclerviewgoogle-cloud-firestorefirebaseui

Firestore RecyclerView E/RecyclerView: No adapter attached; skipping layout


I use Firestore RecyclerView but my list does not show up and my logcat says

E/RecyclerView: No adapter attached; skipping layout

Previously, I made this for a spinner listener and it worked, but when I make it like in this code, it causes an error and does not show the list.

I am sorry about renaming java.class

jurnaladapter for adapter jurnal_sikap_adapter for model class

public class detail_siswa extends AppCompatActivity {

    private FirebaseFirestore firebase;
    private String documentid;
    private String pre_pengetahuan,post_pengetahuan,sikap,keterampilan,deskripsi,designpattern,coverbuku,kelasid;
    ArrayList<String> pretest,posttest;
    ArrayList<Float> pretest_int,posttest_int;
    private LineChart pretestgraph,posttestgraph;
    private Double skorketerampilan,skordesignpattern,skorcover;
    private TextView skoreterendah,skortertinggi,skorterendah2,skorterrtinggi2,designpatterntv,coverbukutv,ratatv,sikaptv;
    private CollectionReference doc;
    private RecyclerView recyclerViewx;
    private jurnaladapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail_siswa);

        firebase = FirebaseFirestore.getInstance();


        skoreterendah = findViewById(R.id.skorterendah);
        skortertinggi = findViewById(R.id.skortertinggi);
        skorterendah2 = findViewById(R.id.postskorterendah);
        skorterrtinggi2 = findViewById(R.id.postskortertinggi);
        designpatterntv = findViewById(R.id.designpatterntampil);
        coverbukutv = findViewById(R.id.coverbukutampil);
        ratatv = findViewById(R.id.rataratatampil);
        sikaptv = findViewById(R.id.sikaptampil);
        pretestgraph = (LineChart) findViewById(R.id.pretest_graph);
        posttestgraph =(LineChart) findViewById(R.id.posttest_graph);
        recyclerViewx = (RecyclerView) findViewById(R.id.recyclerview_jurnalsikapxml);

        TextView textView = (TextView) findViewById(R.id.namasiswa_tampil);
        Intent i = getIntent();
        String nama = i.getStringExtra("nama");
        kelasid = i.getStringExtra("kelasid");
        textView.setText(nama +" : "+kelasid);

        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerViewx.setLayoutManager(layoutManager);



        firebase.collection("kelas").document(kelasid).collection("siswa").whereEqualTo("nama",nama)
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if(task.isSuccessful()) {
                            if (task.getResult().size() > 0) {
                                for (QueryDocumentSnapshot documentSnapshot : task.getResult()) {
                                    documentid = documentSnapshot.getId();
                                    kelas kelas = documentSnapshot.toObject(kelas.class);

                                    pre_pengetahuan = kelas.getPre_pengetahuan();
                                    post_pengetahuan = kelas.getPost_pengetahuan();
                                    sikap = kelas.getSikap();
                                    keterampilan = kelas.getKeterampilan();
                                    deskripsi = kelas.getDeskripsi();
                                    designpattern = kelas.getDesignpattern();
                                    coverbuku = kelas.getCoverbuku();
                                }
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        setuprecycleview();
                                    }
                                });

                                convertntampil();

                            }
                        }
                    }
                });
    }


    private void setuprecycleview() {
        Query query = firebase.collection("kelas").document(kelasid).collection("siswa").document(documentid).collection("jurnalsikap").orderBy("butir", Query.Direction.ASCENDING);

        FirestoreRecyclerOptions<jurnal_sikap_adapter> options = new FirestoreRecyclerOptions.Builder<jurnal_sikap_adapter>()
                .setQuery(query, jurnal_sikap_adapter.class).build();

        adapter = new jurnaladapter(options);
        recyclerViewx.setHasFixedSize(true);
        recyclerViewx.setAdapter(adapter);
        adapter.startListening();
    }

I edited my adapter. Maybe I got something wrong in my adapter:

public class jurnaladapter extends FirestoreRecyclerAdapter<jurnal_sikap_adapter, jurnaladapter.jurnalholder> {

    /**
     * Create a new RecyclerView adapter that listens to a Firestore Query.  See {@link
     * FirestoreRecyclerOptions} for configuration options.
     *
     * @param options
     */
    public jurnaladapter(@NonNull FirestoreRecyclerOptions<jurnal_sikap_adapter> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull jurnalholder jurnalholder, int i, @NonNull jurnal_sikap_adapter jurnal_sikap_adapter) {
        jurnalholder.catatantv.setText(jurnal_sikap_adapter.getCatatan());
        jurnalholder.butirtv.setText(jurnal_sikap_adapter.getButir());
    }

    @NonNull
    @Override
    public jurnalholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.jurnal_sikap_model,parent,false);
        return  new jurnalholder(v);
    }

    class jurnalholder extends RecyclerView.ViewHolder{
        TextView catatantv;
        TextView butirtv;

        public jurnalholder(@NonNull View itemView) {
            super(itemView);
            catatantv = (TextView) itemView.findViewById(R.id.catatansikap);
            butirtv = (TextView) itemView.findViewById(R.id.butirSikap);
        }
    }
}

this my firestore enter image description here enter image description here enter image description here this my model class this model class


Solution

  • Add startListening() before setting the adapter to the RecyclerView as below:

    private void setuprecycleview() {
        Query query = firebase.collection("kelas").document(kelasid).collection("siswa").document(documentid).collection("jurnalsikap").orderBy("butir", Query.Direction.ASCENDING);
    
        FirestoreRecyclerOptions<jurnal_sikap_adapter> options = new FirestoreRecyclerOptions.Builder<jurnal_sikap_adapter>()
                .setQuery(query, jurnal_sikap_adapter.class).build();
    
        adapter = new jurnaladapter(options);
        recyclerViewx.setHasFixedSize(true);
        adapter.startListening();
        recyclerViewx.setAdapter(adapter);
    
    }