Firestore RecyclerView E / RecyclerView:未连接适配器;跳过布局

问题描述 投票:0回答:3

[我使用Firestore RecyclerView,但我的列表未显示,并且我的logcat说]

E / RecyclerView:未连接适配器;跳过布局

以前,我是为微调监听器创建的,但它可以正常工作,但是当我像这段代码中所述那样时,它会导致错误并且不显示列表。

对重命名java.class很抱歉

用于适配器的jurnaladapter模型类的jurnal_sikap_adapter

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

我编辑了适配器。也许我的适配器出了点问题:

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

这是我的消防站enter image description hereenter image description hereenter image description here这是我的模特班this model class

android android-recyclerview google-cloud-firestore firebaseui
3个回答
0
投票

您首先要将适配器设置为视图,然后才开始在其上侦听:

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

0
投票

也许是因为您是从Firebase实现的后台线程中设置适配器的,所以您应该将适配器设置为主UI线程上的recyclerview:

因此,在for循环后的查询回调中:

代替此:

......
......
setuprecycleview();
convertntampil();
.......
.......

执行此操作:

......
......

runOnUiThread(new Runnable(){
@Override 
public void run(){

//call this on UI Thread
setuprecycleview();

}

});

convertntampil();
.....
....

UPDATE:

好吧,我假设您建立的查询不正确,您使用了两次documentid。

此:

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

我认为一定是这样的:

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

0
投票

如下将适配器设置为startListening()之前添加RecyclerView

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

}
© www.soinside.com 2019 - 2024. All rights reserved.