我正在测试该firestore freeStlyeats从github到dev我自己的应用程序,但是我发现了一个滚动的问题,如下所述
在MainAcitivty
上如果我向下滚动并单击非常底层的餐厅,RestaurantDetailActivity
将打开,在RestaurantDetailActivity
上击中或关闭按钮后,MainActivty
滚动后方位置争议,我被滚动到底部,然后选择了一家餐厅
我尝试开发自己的应用程序,并在从RestaurantDetailActivity
MainActivity
卷轴回到顶部位置并检查了Firestore应用程序在从RestaurantDetailActivity
MainActivity
滚动回到顶部位置相同的mRestaurantsRecycler
有什么方法可以解决这个问题?
谢谢
update
在这里,我在github repo问题上找到了我问题的答案
实际上,我只是在学习云的firestore自己。基本上发生的是RestaurantDetailActivity
和MainActivity
是两个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();
}
}
希望在您感到不确定性的任何地方都有帮助并添加断点,然后踩踏代码以查看发生了什么。