1. ホーム
  2. android

[解決済み] アクティビティとフラグメントの数は?

2022-04-15 08:32:58

質問

イントロ

基本的な「フラグメント・チュートリアル」のパターンは、次のようなものです。

  1. タブレットでは、左側にリスト、右側に詳細が表示されます。
  2. どちらも Fragments に存在し、両者は同じ Activity .
  3. 携帯電話では リスト Fragment ひとつに Activity .
  4. を新規に立ち上げる。 Activity の詳細で Fragment .

(例 Android 3.0 Fragments API by Dianne Hackborn と、その フラグメンツAPIガイド )

どちらの端末でも、機能は Fragments . (単純)

について タブレット の場合、アプリ全体は 1 Activity について、その 電話 があります。 多数 Activities .


質問

  • スマホアプリを多数に分割する理由はあるのでしょうか? Activities ?

問題 この方法では、あなたが 多くのロジックが重複している メインのTabletで Activity と、別の電話機である Activities .

  • 1Activityのモデルを両方保持する方が簡単ではないでしょうか。 を切り替えるのと同じロジックで Fragments の出し入れ(レイアウトが違うだけ)?

この方法では、ほとんどのロジックが Fragments が1つだけ存在します。 Activity - の方がコードの重複が少なくて済みます。

また、私が読んだところでは ActionBarSherlock との組み合わせが最適のようです。 Fragments ではなく Activities (ただし、まだ作業していません)。

チュートリアルが簡略化されすぎているのか、それともこのアプローチで何か重大なことを見逃しているのでしょうか?


オフィスでは、両方のアプローチをうまく試してきました。しかし、これから大きなプロジェクトを始めるので、できるだけ簡単に済ませたいと思っています。

関連する質問に対するいくつかのリンク。


更新情報

タブレットのアクティビティと各携帯電話のアクティビティでアプリのロジックを重複させる必要がある理由について、まだ納得していないため、質問のバウンティを開始しました。

また、Squareの人たちによる面白い記事も見つけましたので、読んでみてください。

解決するには?

チュートリアルが非常に簡素化されていることには同意します。彼らはただ Fragments が、提案されているようなパターンには賛成しかねます。

また、アプリのロジックを多くのActivityに重複させるのは良いアイデアではないという点には同意します。 DRYの原則(wikipedia ).


が使うパターンの方が好きです。 ActionBarSherlock フラグメントデモアプリ( ダウンロードはこちら ソースコードはこちら ). 質問にあるチュートリアルに最も近いデモは、アプリの中の "レイアウト" と呼ばれるもの、または FragmentLayoutSupport をソースコードでご覧ください。

このデモでは、ロジックを Activity であり Fragment . その TitlesFragment 実際には、フラグメントを変更するためのロジックが含まれています。このように、それぞれのActivityは非常にシンプルです。非常にシンプルなActivityをたくさん複製するために、どのロジックもActivityの中に入っていないため、非常にシンプルになります。

フラグメントにロジックを入れることで、そこに 何度もコードを書く必要がない フラグメンテーションがどのActivityに配置されていても利用可能です。このため、基本チュートリアルが提案するパターンよりも、より強力なパターンになります。

    /**
    * Helper function to show the details of a selected item, either by
    * displaying a fragment in-place in the current UI, or starting a
    * whole new activity in which it is displayed.
    */
    void showDetails(int index)
    {
        mCurCheckPosition = index;

        if (mDualPane)
        {
            // We can display everything in-place with fragments, so update
            // the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);

            // Check what fragment is currently shown, replace if needed.
            DetailsFragment details = (DetailsFragment) getFragmentManager()
                .findFragmentById(R.id.details);
            if (details == null || details.getShownIndex() != index)
            {
                // Make new fragment to show this selection.
                details = DetailsFragment.newInstance(index);

                // Execute a transaction, replacing any existing fragment
                // with this one inside the frame.
                FragmentTransaction ft = getFragmentManager()
                    .beginTransaction();
                ft.replace(R.id.details, details);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }

        }
        else
        {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            startActivity(intent);
        }
    }


のもう一つの利点は ABS このパターンでは、多くのロジックを含むタブレット・アクティビティを作成する必要がないため、メモリを節約することができます。チュートリアル パターンを使用すると、複雑なアプリでは、メイン アクティビティが非常に大きくなる可能性があります。

全体として、多くのアクティビティを使用することを強制されるとは考えないでください。コードを多くのフラグメントに分割し、それらを使用する際にメモリを節約する機会を得たとお考えください。