2

标题几乎解释了它。

我设置了水平滚动,第一个屏幕有其他片段以及整个水平滚动系统的按钮。我希望用户能够在其中一个片段上按下后退按钮,并使应用程序返回所有按钮的第一个屏幕。

从那里我希望后退按钮成为一个 AlertDialog 询问用户是否要退出应用程序。目前正在发生这种情况(在所有片段上,当您按下后退按钮时,我创建的 AlertDialog 会弹出)。

我研究了 Fragment 事务和“addToBackStack()”,但我不知道如何实现它。我已经查看了该站点上的开发指南和某些问题,但获得一两行代码并不能帮助实现它。

我有一个带有 FragmentPagerAdapter 的 FragmentActivity,每个 Fragment 都有自己的 Java 文件。我有 5 个片段,它们都在 FragmentActivity 和 FragmentPagerAdapter 中调用。

我认为我暂时不需要向你们展示我的任何代码,因为它都是以正常方式设置的。如果你这样做,请告诉我。

我在其他问题上发现的一些代码,尤其是其中一个问题如下:

FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();

不过,要继续这样做有点困难。

我将衷心感谢您的帮助。

编辑:我的代码已删除 - 不需要。

4

2 回答 2

2

如果您使用ViewPager我之前回答的问题中的 并且您想回到ViewPager用户按下BACK按钮时的第一个片段,然后覆盖这样的onBackPressed方法:

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().findFragmentByTag("outDialog") != null
            && ((DialogFragment) getSupportFragmentManager()
                    .findFragmentByTag("outDialog")).isVisible()) {
        // we have the out dialog visible and the user clicked back so let
        // the
        // normal events happen
        super.onBackPressed();
        return;
    }
    int currentPosition = mViewPager.getCurrentItem();
    if (currentPosition != 0) {
        // if the page the ViewPager shows isn't the first one then move it
        // to the first one
        mViewPager.setCurrentItem(0);
    } else {
        // we are at the first position already and the user wants out, so
        // annoy him with a dialog that asks him once again if he wants out.
        DialogFragment askHim = new DialogFragment();
        askHim.show(getSupportFragmentManager(), "outDialog");
        // in the dialog listener, if the user presses ok, finish the activity
    }
}
于 2012-12-29T09:48:27.333 回答
0

您是否尝试过覆盖Activity.onBackPressed()?我用过addToBackStack(),效果很好,但我不知道它是否适用于PagerAdapter. 我认为您可以覆盖Activity.onBackPressed()并在该方法中,您可以检查当前页面是否为首页并执行您想做的任何工作。

这是我认为的伪代码。

public void onBackPressed() {
  if( pager.getCurrentPage() == 0 ) { //I'm not sure this method exists or not. just example. :-)
      //exit code here
  } else {
      // show first page
  }
}
于 2012-12-28T15:16:13.637 回答