活动重启后,Firestore RecyclerView 不显示来自 Firestore 数据库的数据
Posted
技术标签:
【中文标题】活动重启后,Firestore RecyclerView 不显示来自 Firestore 数据库的数据【英文标题】:FirestoreRecyclerView is not displaying data from Firestore DB after activity restart 【发布时间】:2021-12-22 17:28:21 【问题描述】:我的在线投票应用程序有这个活动,它有一个基于 Firestore UI 的 RecyclerView,它显示我的所有数据,字段“registrationStatus”的值为“Pending”。在应用程序启动时,会显示数据,但是在通过与 RecyclerView 上的项目交互进入不同的活动之后,然后再次返回到上一个活动,数据没有显示,但是当我触摸空白的 RecyclerView 时,我可以仍然访问以前显示的数据。我似乎无法知道导致这种情况发生的位置和代码。如果你能帮我解决这个问题,那就太好了。
这是在应用程序的开头:
这是与 RecyclerView 中的项目交互后的活动:
现在回到之前的活动:
这是与 RecyclerView 相关的代码
public class AdminHomepage extends AppCompatActivity
Button logOut;
FirebaseAuth mAuth = FirebaseAuth.getInstance();
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference notebookRef = db.collection("Candidates");
RecyclerView recyclerView;
AdminCandidateAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_homepage);
//Buttons
logOut = findViewById(R.id.adminLogOut);
//Recycler View Things
setUpRecyclerView();
//Log-Out Button Tap
logOut.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
mAuth.signOut();
Toast.makeText(getApplicationContext(), "Logged Out Successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
);
//Click Listener for the RecyclerView
adapter.setOnItemClickListener(new AdminCandidateAdapter.OnItemClickListener()
@Override
public void onItemClick(DocumentSnapshot documentSnapshot, int position)
AdminCandidateItem note = documentSnapshot.toObject(AdminCandidateItem.class);
String name = note.getCandidateFullName();
startActivity(new Intent(getApplicationContext(), EvaluateCandidate.class).putExtra("name", name));
);
private void setUpRecyclerView()
Query query = notebookRef.whereEqualTo("registrationStatus", "Pending").orderBy("candidateFullName", Query.Direction.ASCENDING);
FirestoreRecyclerOptions<AdminCandidateItem> options = new FirestoreRecyclerOptions.Builder<AdminCandidateItem>()
.setQuery(query, AdminCandidateItem.class)
.build();
adapter = new AdminCandidateAdapter(options);
recyclerView = findViewById(R.id.candidateList);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
recyclerView.setItemAnimator(null);
@Override
protected void onStart()
super.onStart();
adapter.startListening();
@Override
protected void onStop()
super.onStop();
adapter.stopListening();
【问题讨论】:
【参考方案1】:所以我已经解决了我的问题。似乎 RecyclerView 无法显示这些项目,因为我已分配 RecyclerView 来包装其所有内容。通过分配自定义高度大小,现在即使在 Activity 重新启动后也会显示项目。
这是高度变化前该部分的 XML 代码:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/candidateList"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:background="@color/gray"
android:paddingBottom="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView7" />
这是高度变化后的代码:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/candidateList"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:background="@color/gray"
android:paddingBottom="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView7" />
所以我设置了一个 300dp 的自定义 layout_height 来为我的 RecyclerView 腾出空间
这是更改后的活动:
【讨论】:
以上是关于活动重启后,Firestore RecyclerView 不显示来自 Firestore 数据库的数据的主要内容,如果未能解决你的问题,请参考以下文章
在 GPS 芯片长时间处于活动状态后,Android 设备需要重启/重启才能获取 GPS 位置
是否在操作系统重启后调用 onActivityResult() 之前重新创建了活动的视图?
如何在不覆盖的情况下向 Firebase Firestore 添加值?
Android Studio:无效缓存/重启后对活动主的未解析引用