试图替换片段,但它一直显示相同的片段

Posted

技术标签:

【中文标题】试图替换片段,但它一直显示相同的片段【英文标题】:Trying to replace Fragment but it keeps on showing the same Fragment 【发布时间】:2016-09-01 19:06:37 【问题描述】:

我有两个片段。例如 Fragment A 和 Fragment B,随着 Activity 的启动,Fragment A 也会启动。现在我输入一些应该启动片段 B 的输入,它到达片段 B(执行其代码),但它继续显示片段 A。 可能出了什么问题?任何帮助将不胜感激。

    homeScreenFragment = new HomeScreenFragment();
    getFragmentManager().beginTransaction().add(R.id.home_layout, homeScreenFragment, "Home Page").
            addToBackStack("Main Home Page").commit();

我在 MainActivity 类中运行这个片段,现在在 Searchview 中输入一些文本后,一个 AsyncTask 被执行并在它完成后我尝试运行另一个片段(如代码所示)。

    public void SearchMovieTaskComplete(MovieDetails[] details) 
    if(details!=null)
        SearchResultFragment searchResultFragment= new SearchResultFragment();
        Bundle data=new Bundle();
        data.putSerializable("MovieDetail",details);
        searchResultFragment.setArguments(data);
        getFragmentManager().beginTransaction().replace(R.id.home_layout,searchResultFragment,"searchedResultCollected").commit();
    

【问题讨论】:

请提供您编写逻辑以显示片段 B 的代码 我添加了一些代码sn-ps,请看一下。 您是否检查过它是否在 details 设置为 null 的情况下被调用? 【参考方案1】:

那是因为您每次执行此操作时都会添加一个片段(根据我在您的代码中的理解)。所以基本上你要做的就是在你的Activity 中保留一个FragmentA 对象和一个FragmentB 对象。然后基于您替换而不是添加。当您添加时,它们只会重叠。这样做:

getFragmentManager().beginTransaction().replace(R.id.home_layout, homeScreenFragment, "Home Page").addToBackStack("Main Home Page").commit();

d

【讨论】:

以上是关于试图替换片段,但它一直显示相同的片段的主要内容,如果未能解决你的问题,请参考以下文章

使用 replace() 时片段未替换

Android - 多个视图或运行时片段替换​​?

如何使用 ViewPager 显示相同的片段,但每次加载不同的数据?

在片段和活动之间导航

有没有办法使用相同的布局动态创建片段并向它们显示数据?

用片段替换某些东西