[解決済み] アクティビティとフラグメントの数は?
質問
イントロ
基本的な「フラグメント・チュートリアル」のパターンは、次のようなものです。
- タブレットでは、左側にリスト、右側に詳細が表示されます。
-
どちらも
Fragments
に存在し、両者は同じActivity
. -
携帯電話では
リスト
Fragment
ひとつにActivity
. -
を新規に立ち上げる。
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
(ただし、まだ作業していません)。
チュートリアルが簡略化されすぎているのか、それともこのアプローチで何か重大なことを見逃しているのでしょうか?
オフィスでは、両方のアプローチをうまく試してきました。しかし、これから大きなプロジェクトを始めるので、できるだけ簡単に済ませたいと思っています。
関連する質問に対するいくつかのリンク。
- ジレンマ:FragmentとActivityをいつ使うか。
- Activity TransitionとDynamic Fragmentの使い分けのパターン
- Android - フラグメントとアクティビティ、ビューの違いを教えてください。
- Androidではアクティビティかフラグメントか?
- 複数のフラグメントとアクティビティによるインタラクションデザイン
- では、Android 3.0におけるフラグメントの具体的なメリットは何でしょうか?
更新情報
タブレットのアクティビティと各携帯電話のアクティビティでアプリのロジックを重複させる必要がある理由について、まだ納得していないため、質問のバウンティを開始しました。
また、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 このパターンでは、多くのロジックを含むタブレット・アクティビティを作成する必要がないため、メモリを節約することができます。チュートリアル パターンを使用すると、複雑なアプリでは、メイン アクティビティが非常に大きくなる可能性があります。
全体として、多くのアクティビティを使用することを強制されるとは考えないでください。コードを多くのフラグメントに分割し、それらを使用する際にメモリを節約する機会を得たとお考えください。
関連
-
[解決済み】フラグメントMyFragmentがアクティビティにアタッチされない。
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
アンドロイドのエリプサイズを使用する
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] APKファイルのリバースエンジニアリングを回避する方法
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?
-
[解決済み] ViewPagerとフラグメント - フラグメントの状態を保存する正しい方法は何ですか?
-
[解決済み] FragmentのsetRetainInstance(boolean)を理解する。
-
[解決済み】フラグメント内のXML onClickを使用して、ボタンのクリックを処理する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
AndroidStudio reports Could not resolve all artifacts for configuration ':app:classpath'.
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
Androidで、onTouchEventでダブルクリックを実装し、ダブルクリックイベントとして判定する方法
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない
-
Android ProgressBarのスタイルカラーを変更する
-
Android.support.v7.widget.Toolbar が見つかりませんでした。
-
アンドロイドにおけるトークンの利用
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?