【问题标题】: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 的情况下被调用?

标签: android android-fragments


【解决方案1】:

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

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

d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多