活动重启后,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:无效缓存/重启后对活动主的未解析引用

Firestore 实时更新不适用于 recyclerview

Spring-security:即使在 JVM 重启后也能保持活动会话