【问题标题】:MainActivity scrolls back to top position after coming back from RestaurantDetailActivityMainActivity 从 RestaurantDetailActivity 回来后滚动回顶部位置
【发布时间】:2017-11-25 11:44:28
【问题描述】:

我正在测试来自 GitHub 的 fireStore FreindlyEats app 以开发我自己的应用程序,但我发现了一个滚动问题,如下所述

开启MainAcitivty 如果我向下滚动并单击最底部的餐厅,RestaurantDetailActivity 将打开, 在RestaurantDetailActivity 按下返回或关闭按钮后,MainActivty 滚动返回顶部位置争议我滚动到底部并选择底部一家餐厅

我尝试开发自己的应用程序并发现相同的问题MainActivityRestaurantDetailActivity 回来后滚动回顶部位置

并检查了 FireStore 应用程序,发现 MainActivity 处的相同 mRestaurantsRecycler 在从 RestaurantDetailActivity 返回后滚动回顶部位置

有什么办法可以解决这个问题吗?

谢谢

更新

Here I found the answer to my question at GitHub repo issue

【问题讨论】:

  • 这与 Firebase 无关。保存适配器位置是您必须做的事情
  • 感谢 cricket_007 的评论,您能告诉我如何保存或记住适配器位置
  • 如果您需要帮助,请随时创建新帖子

标签: android firebase google-cloud-firestore


【解决方案1】:

实际上,我只是自己学习 Cloud Firestore 完成了本教程。 基本上发生的情况是RestaurantDetailActivityMainActivity 是两个相互独立的Acivitys。在打开(转到)RestaurantDetailActivity 之前,您必须保存适配器(餐厅列表)所在的位置。当您按下后退按钮并离开 RestaurantDetailActivity 时,MainActivity 被带回到前面,并且第一个运行的代码是

public void onStart() {...

如果您遵循代码,您会看到每次MainActivity 启动或恢复(onStart()) 适配器都会重置并且所有餐厅都会重新加载。这仅用于演示目的,仅显示 Cloud Firestore 的功能。你必须做的是每次去它时停止重启MainActivityadapter(在RestaurantDetailActivity上按回)并重新配置代码,以便适配器可以记住它所在的位置。

完成后,此代码会将适配器(餐厅列表)定位在您喜欢的位置:

        mRestaurantsRecycler.scrollToPosition(mAdapter.getItemCount());

这里是activity-lifecycle的文档

更新:

请记住,这只是一个简单的示例,可在每次 MainActivity 可见时阻止适配器重新加载。 将MainActivity中的onStart()onStop()方法替换成这样

@Override
public void onStart() {
    super.onStart();

    // Start sign in if necessary
    if (shouldStartSignIn()) {
        startSignIn();
        return;
    }

    // Apply filters
    if(!mAdapter.ifStarted())
        onFilter(mViewModel.getFilters());
}

@Override
public void onStop() {
    super.onStop();
}

将此方法添加到FirestoreAdapter

public boolean ifStarted() {
    return (mRegistration != null);
}

分离监听器总是一个好主意,所以将它添加到MainActivity

@Override
public void onDestroy() {
    super.onDestroy();
    if (mAdapter != null) {
        mAdapter.stopListening();
    }
} 

希望它对您有所帮助,并在您感到不确定的地方添加断点并逐步浏览代码以查看发生了什么。

【讨论】:

  • 谢谢你,Erik,知道与 Firestore 无关,但仍然对如何保存适配器位置感到困惑
  • 其实你不必保存餐厅列表不会移动的位置。但是为此,当您从RestaurantDetailActivity返回时,您必须阻止适配器重新加载
猜你喜欢
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 2015-03-03
  • 2020-02-10
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多