Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导航架构组件,包含从一开始显示的列表的片段,同时从另一个片段返回_Java_Android Studio_Android Fragments_Android Architecture Components_Android Architecture Navigation - Fatal编程技术网

Java 导航架构组件,包含从一开始显示的列表的片段,同时从另一个片段返回

Java 导航架构组件,包含从一开始显示的列表的片段,同时从另一个片段返回,java,android-studio,android-fragments,android-architecture-components,android-architecture-navigation,Java,Android Studio,Android Fragments,Android Architecture Components,Android Architecture Navigation,场景:假设底部导航栏包含主页片段,可以打开另一个片段,比如产品列表。从Product Listing fragment,用户可以打开Product Detailfragment以查看任何项目的详细信息 问题:假设用户已在产品列表片段中滚动列表,并到达第100项并点击某个项目以查看其在产品详细信息片段中的详细信息。现在,当用户按下后退按钮以返回产品列表片段时,列表从一开始就显示出来 是否有任何方法或解决方法来克服这个问题。我想在返回时向用户显示第100项 从产品详细信息片段返回时,执行产品列表片段

场景:假设底部导航栏包含主页片段,可以打开另一个片段,比如产品列表。从Product Listing fragment,用户可以打开Product Detailfragment以查看任何项目的详细信息

问题:假设用户已在产品列表片段中滚动列表,并到达第100项并点击某个项目以查看其在产品详细信息片段中的详细信息。现在,当用户按下后退按钮以返回产品列表片段时,列表从一开始就显示出来

是否有任何方法或解决方法来克服这个问题。我想在返回时向用户显示第100项

从产品详细信息片段返回时,执行产品列表片段的重写方法Onstart()、OnCreateView()、OnViewCreated()和OnResume()

View view;
Unbinder unbinder;
@Override
    public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (view == null) {
            view = inflater.inflate(R.layout.product_listing_screen, container, false);
            return view;
        } else {
            return view;
        }
    }

@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Timber.e("%s onViewCreated Called ", TAG);
       unbinder = ButterKnife.bind(this, view);
    }

    @Override
        public void onResume() {
            super.onResume();
            Timber.e("%s onResume Called ", TAG);
     if (adapter == null || adapterList.size() == 0) {
                updateProductListingCategory(itemId); // This is the method making a web request. And while coming back from detail fragment, it isn't called again.
                }
}

嗨,我刚才已经回答了这个问题。希望这有帮助@Badhrinathanessane也尝试过这个。但这不是我的问题。数据重新蚀刻已经解决。问题是,包含项目列表的recyclerview失去了它的位置&返回到片段会从一开始就显示列表。这是不可接受的行为。上述链接无法解决此问题。它维护视图,但不维护列表位置。好的,那么我怀疑问题在于您在onCreateView()中设置ListView数据的位置。不可接受的行为是因为不可接受/缺少代码:)。您正在使用ViewModel吗?请共享片段代码、ViewModel和/或Repo代码。LiveData/Flowable也可能是可疑的。@BadhrinathCanessane刚刚添加了一些方法来显示流。。。我所说的不可接受,是指在任何情况下,我都不想要这个东西:)。在我的情况下,从web请求中获取的数据不是问题,请检查adapterList的大小&仅当它为0或adapter为null时才发出请求。当Recyclerview回来的时候,它正在失去它的位置,我想这并不意味着ViewModel是一个强制性的东西。如果我错了,请纠正我!理论上,滚动位置将作为LayoutManager的savedInstanceState的一部分保留。因此,如果适配器仅在数据实际可用时设置,则它不应忘记滚动位置。