0

現在、ログイン アクティビティ、「メイン」アクティビティ (ユーザー情報、概要など)、および単一レコードのデータ入力アクティビティの 3 つのアクティビティに分割されているデータ入力アプリケーションを作成しています。これらの各アクティビティには、いくつかの異なる「画面」 (つまり、一連のビューを含むフルページ レイアウト) があり、これらの各画面は単一のフラグメントです。

2 つの質問があります。

  1. これは適切な全体的なアーキテクチャですか? アクティビティ/フラグメントの分割はやや恣意的ですが、これらのパーティションは私にとって意味のあるものです。

  2. アクティビティ内のフラグメント間の切り替えを管理する最良の方法は何ですか? 私の主なアクティビティは、タブ + スワイプ ナビゲーション構造に基づいているため、 ViewPagerandを使用しますが、すべてのアクティビティには、メニュー項目として表されないフラグメントがあります。これには aなしで aFragmentPagerAdapterを使用する必要がありますか (そうであれば、どのように)? 遷移を処理するために独自の抽象化レイヤーを作成する必要がありますか?FragmentPagerAdapterViewPager

多くのチュートリアルと例を読みましたが、この特定のパターンが使用されているのを見たことがありません。私は Android 開発の経験があまりないので、独自のソリューションを作成する前に、既製のソリューションがあるかどうかを確認するのが最善だと考えました。アドバイスをいただければ幸いです。ありがとう!

編集:これは、タイトルページとログインページの2つの「画面」を切り替えるための非常に単純化されたバージョンとして、現時点で私が持っているものです。これは、処理したいことのほとんどを示しています (フラグメント インスタンスの保持、トランザクションの管理、レイアウトへの配置)。PagerAdapter と ViewPager の機能をいくつかの方法で複製しているように見えますが、主なナビゲーションはアプリ内のボタンを介して行われるため、メニュー、タブ、スワイプなどに結び付けたくありません。また、より複雑なフラグメントのフラグメント初期化にいくつかの初期データを渡す必要があります。

public class LoginFragmentSwitcher {
    private int mCurFragIndex;
    private ArrayList<Fragment> mFragList;

    public LoginFragmentSwitcher() {
        //set initial index
        mCurFragIndex = 0;

        //create fragments
        mFragList = new ArrayList<Fragment>();
        mFragList.add(new TitleFragment());
        mFragList.add(new LoginFragment());
        //TODO: more fragments will be added here

        //display the first fragment
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.fragment_container, mFragList.get(0));
        ft.commit();
    }

    // Perform a fragment transition to the specified index
    public void showFragment(int newFragIndex) {
        //only switch if you're not already showing the appropriate fragment
        if (newFragIndex != mCurFragIndex) {
            //start the fragment transaction
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

            //TODO: apply transition style if desired

            //switch content to the new fragment
            ft.replace(R.id.fragment_container, mFragList.get(newFragIndex));

            //register entry in the back stack and complete transaction
            ft.addToBackStack(null);
            ft.commit();

            //update index
            mCurFragIndex = newFragIndex;
        }
    }
}
4

0 に答える 0