[我使用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);
}
}
}
您首先要将适配器设置为视图,然后才开始在其上侦听:
adapter = new jurnaladapter(options);
recyclerViewx.setHasFixedSize(true);
recyclerViewx.setAdapter(adapter);
adapter.startListening();
也许是因为您是从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);
如下将适配器设置为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);
}