在Android

时间:2016-03-16 10:19:36

标签: android android-fragments

我是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。

请帮我解决这个问题。任何正确解释这里使用的概念的链接也将受到赞赏。

3 个答案:

答案 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,您需要替换特定项目上的特定片段。

希望有所帮助:)