gpt4 book ai didi

java - CreateView 方法上的自定义对话框在 firebase firestore onCompletelistener 获取数据到列表之前返回

转载 作者:行者123 更新时间:2023-12-02 11:12:24 28 4
gpt4 key购买 nike

CreateView 方法上的自定义对话框在 Firebase Firestore onCompletelistener 获取要列出的数据之前返回。这就是为什么没有 View 显示

我用CardView制作了RecyclerView,点击卡 View 时我需要自定义对话框来从Firestore获取数据..但在从Firestore获取数据之前//语句返回rootView 被执行,因此对话框中不显示任何数据

import android.app.DialogFragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.crashlytics.android.Crashlytics;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;
import java.util.List;

import io.fabric.sdk.android.Fabric;


public class DialogSetClassTeacher extends DialogFragment {

private RecyclerView recyclerView;
private SetClassTeacherListAdapter adapter;
private FirebaseFirestore databaseTeachers;
private List<ClassTeacher> teacherLists;
FirebaseApp smaTeacher;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Fabric.with(this.getActivity(), new Crashlytics());
final View rootView = inflater.inflate(R.layout.dialog_set_class_teacher, container, false);

FirebaseOptions options = new FirebaseOptions.Builder()
.setDatabaseUrl(getResources().getString(R.string.dbURL))
.setApiKey(getResources().getString(R.string.api))
.setApplicationId(getResources().getString(R.string.appID))
.setProjectId(getResources().getString(R.string.projectId))
.setStorageBucket(getResources().getString(R.string.storageBucket)).build();

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setPersistenceEnabled(true)
.build();

boolean hasBeenInitialized = false;
List<FirebaseApp> fireBaseApps = FirebaseApp.getApps(this.getActivity());
for (FirebaseApp app : fireBaseApps) {
if (app.getName().equals("SMA_Teachers")) {
hasBeenInitialized = true;

}
}

if (!hasBeenInitialized) {
smaTeacher = FirebaseApp.initializeApp(this.getActivity(), options, "SMA_Teachers");

}

databaseTeachers = FirebaseFirestore.getInstance(FirebaseApp.getInstance("SMA_Teachers"));
databaseTeachers.setFirestoreSettings(settings);
recyclerView = rootView.findViewById(R.id.dialogSetClassTeacherRecycleView);
recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));

this.getDialog().setTitle("Select a Class Teacher");
databaseTeachers.collection("Teachers").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
teacherLists = new ArrayList<>();
for (DocumentSnapshot doc : task.getResult()) {

ClassTeacher newDataList =
new ClassTeacher(doc.getString("name"), " ", doc.getString("email"));
teacherLists.add(newDataList);
Toast.makeText(getActivity(), "inside", Toast.LENGTH_SHORT).show();
adapter = new SetClassTeacherListAdapter(getActivity(), teacherLists);
recyclerView.setAdapter(adapter);

}
} else {
Toast.makeText(getActivity(), "Error : " + task.getException(), Toast.LENGTH_SHORT).show();
}
}
});

//before getting a data its return
return rootView;
}


}
`

最佳答案

要解决此问题,请获取以下代码行:

adapter = new SetClassTeacherListAdapter(getActivity(), teacherLists);
recyclerView.setAdapter(adapter);

退出 for 循环,因为您创建了 SetClassTeacherListAdapter 类的新实例,并且在每次迭代中设置适配器。

关于java - CreateView 方法上的自定义对话框在 firebase firestore onCompletelistener 获取数据到列表之前返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50535672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com