我是android开发新手,请耐心等待。 我有三个片段 - Frag1,Frag2和Frag3。 Frag1是一种ListView,具有在启动App时创建的项目列表。 Frag2和Frag3基本上对应于VideoViews,它将用于播放来自不同玩家的不同视频。其中一个将播放内容视频,另一个将播放广告视频。
当我点击Frag1中的特定项目时,我想创建Frag2和Frag3。我希望有两个片段,因为我可能随时都要播放广告。我将在广告播放时隐藏内容片段,反之亦然。 另外我想要按下后退按钮时,我应该回到Frag1(listView),不管按下后退按钮时是否可见Frag2或Frag3。
我无法清楚地弄清楚如何堆叠碎片,以便每当我在播放广告或视频时按下后退按钮,它都会转到listView。因为如果我理解正确,碎片会按照添加的顺序堆叠起来。因此,如果我添加Frag1后跟Frag2和Frag3的顺序,那么当Frag3在顶部时按下将返回Frag2而不是Frag1。还要说当前Frag2是可见的并且我按回去,那么我认为Frag3仍然会保留,即使我希望只要按下后退按钮就会弹出Frag2和Frag3。
请帮我解决这个问题。任何正确解释这里使用的概念的链接也将受到赞赏。
答案 0 :(得分:0)
如果您在执行片段交易时调用addToBackStack()
,则片段只会添加到后台堆栈。
方法1
因此,当您从Frag1打开Frag2时,您应该调用它,因为当您按下时希望Frag1在那里。
然而,当您从Frag2打开Frag3时,反之亦然,请不要调用addToBackStack()
。如果你按下Frag3或Frag2的后退按钮,你将直接转到Frag1,因为你的后面的堆栈只有Frag1。
方法2
另一种方法是覆盖Activity中的onBackPressed()
方法。只要按下后退按钮,就可以使用
Fragment f = getFragmentManager.popBackStackImmediate
然后通过 -
检查哪个片段if(f instanceof Frag2 || f instanceof Frag3){
//pop it
}
现在再次检查。继续检查,直到只剩下Frag1。
答案 1 :(得分:0)
为此,您可以使用具有以下功能的标签片段。 试试这个 -
public void onBackPressed(){
FragmentManager fm = getActivity().getSupportFragmentManager();
fm.popBackStack();
}
答案 2 :(得分:0)
你需要通过给它提供id来管理片段,你可以在backpress()上替换删除你想要的任何东西,只需看看我开发的代码来管理,我也有类似的要求所以这就是我的方式管理
@Override
public void onBackPressed() {
Highlights_fragment test1 = (Highlights_fragment)getFragmentManager().findFragmentByTag("1");
Aktulless_Fragment test2 = (Aktulless_Fragment)getFragmentManager().findFragmentByTag("2");
if (test1 != null && test1.isVisible()) {
//DO STUFF
getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.frame_container)).commit();
}
else if(test2 != null && test2.isVisible()){
//Whatever
getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.frame_container)).commit();
}
else
{
super.onBackPressed();
}
对于Frag2和Frag3,您需要替换特定项目上的特定片段。
希望有所帮助:)