从RestaurantDetailActivity

时间:2017-11-25 11:44:29

标签: android firebase google-cloud-firestore

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

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

我尝试开发自己的应用,发现同样的问题MainActivityRestaurantDetailActivity

返回后滚动到顶部位置

并查看了FireStore应用,发现同一mRestaurantsRecycler位于MainActivity后从RestaurantDetailActivity

返回后滚动到顶部位置

有没有办法解决这个问题?

谢谢

更新

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

1 个答案:

答案 0 :(得分:0)

其实我刚刚自己学习了Cloud Firestore。 基本上发生的事情是RestaurantDetailActivityMainActivity是两个Acivitys彼此独立。在打开(转到)RestaurantDetailActivity之前,您必须保存适配器(restaurang列表)所在的位置。当您按下后退按钮并离开RestaurantDetailActivityMainActivity被带回到前面,第一个代码正在运行

public void onStart() {...

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

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

        mRestaurantsRecycler.scrollToPosition(mAdapter.getItemCount());

此处为activity-lifecycle

的文档

<强>更新

请记住,这只是一个简单的示例,每次MainActivity变为可见时停止适配器重新加载。 替换onStart()中的onStop()MainActivity方法,使其看起来像这样

@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();
    }
} 

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