从另一个片段返回时返回到屏幕上的当前位置

Posted

技术标签:

【中文标题】从另一个片段返回时返回到屏幕上的当前位置【英文标题】:Return to current position on the screen when returning from another fragment 【发布时间】:2016-11-01 20:11:04 【问题描述】:

我有一个片段,其中包含在 recyclerView 中显示的项目列表。该列表可以无休止地滚动。每个项目都是可点击的,并打开另一个带有其描述的片段。我的问题是当我单击任何项​​目并返回时,我想返回到屏幕上的相同位置。现在,即使滚动很多项目,我也总是返回屏幕顶部。

 private void setScrollListener() 

    recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener(linearLayoutManager) 
        @Override
        public void onLoadMore(int page, int totalItemsCount) 

            apiCall(pageNumber++, 10);
        
    );

private void listClickListener() 

    if (myAdapter != null) 

        myAdapter.setOnItemClickListener(new OnItemClickListener() 
            @Override
            public void onItemClick(View itemView, int position) 

                Items items = itemsList.get(position);
                setDetailsFragment(items.getDescription());

            
        );
    



 private void setDetailsFragment(String description) 
    DetailsFragment detailsFragment = new DetailsFragment();
    detailsFragment.setDescription(description);
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.frag_container, detailsFragment, "TAG");
    fragmentTransaction.addToBackStack("TAG");
    fragmentTransaction.commit();

【问题讨论】:

请发布您如何在项目点击时切换到下一个片段的代码,即setDetailsFragment() 实现。 是的,对不起,我忘了添加这个方法 【参考方案1】:

这是因为您要替换之前的片段。 如果您不想重置前一个片段的状态,请添加下一个片段而不是替换

改成——

fragmentTransaction.add(R.id.frag_container, detailsFragment, "TAG");

setDetailsFragment().

【讨论】:

当我将其更改为添加而不是替换时,Main Fragment 仍在屏幕上,DetailsFragment 位于其顶部。 是的,当然,这就是 .add() 的作用。那是什么问题呢?可以加截图吗? 问题是主要片段并没有消失。我的详细信息片段中的图像和文本列表位于列表顶部 问题在于布局文件。可以发一下吗? 布局很好。我的 activity_main.xml 中有一个框架布局,它是我的两个片段的片段容器

以上是关于从另一个片段返回时返回到屏幕上的当前位置的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 Activity 返回后返回 MainActivity 的片段?

从另一个片段导航后,ViewPager在返回时不可见

从另一个片段返回时如何在视图页面中显示片段?

热门从另一个片段导航到主页片段

从另一个活动返回后如何恢复活动中最后打开的片段

getBoundingClientRect 返回错误的结果