2

タイトルはそれをかなり説明しています。

水平スクロールを設定しました。最初の画面には、他のフラグメントと水平スクロールシステム全体へのボタンがあります。私が望んでいるのは、ユーザーがこれらのフラグメントの1つで戻るボタンを押すことができ、アプリがすべてのボタンを含む最初の画面に戻ることができるようにすることです。

そこから、戻るボタンをAlertDialogにして、ユーザーにアプリを終了するかどうかを尋ねます。現時点では、これが起こっています(戻るボタンを押すと、すべてのフラグメントで、作成したAlertDialogがポップアップします)。

フラグメントトランザクションと「addToBackStack()」を調べましたが、実装方法がわかりません。このサイトの開発ガイドと特定の質問を見てきましたが、1行または2行のコードを取得しても実装には役立ちません。

FragmentPagerAdapterが設定されたFragmentActivityがあり、各Fragmentには独自のJavaファイルがあります。FragmentActivityとFragmentPagerAdapterですべて呼び出される5つのフラグメントがあります。

すべて通常の方法で設定されているので、今のところ、私のコードを皆さんに紹介する必要はないと思います。もしそうなら私に知らせてください。

他の質問、特に1つで見つけたコードは、次のとおりです。

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

しかし、それだけを続けるのは少し難しいです。

よろしくお願いします。

編集:私のコードは削除されました-必要ありませんでした。

4

2 に答える 2

2

以前に回答した質問からを使用し、ユーザーがボタンを押したときにViewPager最初のフラグメントに戻りたい場合は、次のようにメソッドをオーバーライドします。ViewPagerBACKonBackPressed

@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 に答える