Main Activity从RestaurantDetailactivity回来后,滚动回到了顶部位置



我正在测试该firestore freeStlyeats从github到dev我自己的应用程序,但是我发现了一个滚动的问题,如下所述

MainAcitivty上如果我向下滚动并单击非常底层的餐厅,RestaurantDetailActivity将打开,在RestaurantDetailActivity上击中或关闭按钮后,MainActivty滚动后方位置争议,我被滚动到底部,然后选择了一家餐厅

我尝试开发自己的应用程序,并在从RestaurantDetailActivity

回来后发现了同一问题MainActivity卷轴回到顶部位置

并检查了Firestore应用程序在从RestaurantDetailActivity

回来后,在MainActivity滚动回到顶部位置相同的mRestaurantsRecycler

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

谢谢

update

在这里,我在github repo问题上找到了我问题的答案

实际上,我只是在学习云的firestore自己。基本上发生的是RestaurantDetailActivityMainActivity是两个Acivitys彼此独立。在打开(转到)RestaurantDetailActivity之前,您必须保存适配器(餐厅列表)所在的位置。当您按下返回按钮并离开RestaurantDetailActivity时,MainActivity被带回前面,并且第一个代码是

public void onStart() {...

如果您遵循代码,您会发现每次 MainActivity启动或简历(onstart())适配器已重置,并且所有餐厅都会重新加载。这仅是为了演示目的,仅显示云爆炸的功能。您必须要做的是停止重新启动MainActivity adapter每次进入它(在RestaurantDetailActivity上的反向)并重新配置代码,以便适配器可以记住它所在的位置。

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

        mRestaurantsRecycler.scrollToPosition(mAdapter.getItemCount());

此处的活动doc for-fifecycle

更新:

请记住,这只是一个简单的示例,每当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);
}

分离侦听器总是一个好的IDE,因此请在MainActivity

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

希望在您感到不确定性的任何地方都有帮助并添加断点,然后踩踏代码以查看发生了什么。

最新更新