试图替换片段,但它一直显示相同的片段
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
【讨论】:
以上是关于试图替换片段,但它一直显示相同的片段的主要内容,如果未能解决你的问题,请参考以下文章