我正在测试这个来自GitHub的fireStore FreindlyEats app以开发我自己的应用程序,但我发现滚动的问题如下所述
在MainAcitivty
如果我向下滚动并点击最底层的餐厅,RestaurantDetailActivity
将会打开,
在RestaurantDetailActivity
点击或关闭按钮后,MainActivty
向后滚动顶部位置争议我滚动到底部并选择底部的一个餐厅
我尝试开发自己的应用,发现同样的问题MainActivity
从RestaurantDetailActivity
并查看了FireStore应用,发现同一mRestaurantsRecycler
位于MainActivity
后从RestaurantDetailActivity
有没有办法解决这个问题?
谢谢
更新
答案 0 :(得分:0)
其实我刚刚自己学习了Cloud Firestore。
基本上发生的事情是RestaurantDetailActivity
和MainActivity
是两个Acivitys
彼此独立。在打开(转到)RestaurantDetailActivity
之前,您必须保存适配器(restaurang列表)所在的位置。当您按下后退按钮并离开RestaurantDetailActivity
时MainActivity
被带回到前面,第一个代码正在运行
public void onStart() {...
如果您按照代码看到每次MainActivity
启动或恢复(onStart()),都会重置适配器并重新加载所有餐馆。这仅用于演示目的,仅显示Cloud Firestore的功能。你必须做的是每次你去它时停止重启MainActivity
adapter
(在RestaurantDetailActivity
上反压)并重新配置代码,以便适配器能记住它所在的位置。 / p>
完成后,此代码会将适配器(餐馆列表)放在您喜欢的位置:
的文档mRestaurantsRecycler.scrollToPosition(mAdapter.getItemCount());
<强>更新强>
请记住,这只是一个简单的示例,每次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();
}
}
希望它有所帮助,并在您感到不确定的地方添加断点,并逐步查看代码以了解发生的情况。