[解決済み] Android 4.0, 4.1 (<4.2) でサポートライブラリを使用せずにネストされたフラグメントを使用するためのベストプラクティス
質問
4.0 および 4.1 タブレット用のアプリを書いています。 サポート ライブラリを使用したくありません。 (必要でなければ) 4.x api のみであるためです。
私のターゲットプラットフォームは、次のように非常によく定義されています: >= 4.0 および <= 4.1
このアプリは、マルチペインのレイアウト(2 つのフラグメント、左側に小さなフラグメント、右側に 1 つのコンテンツのフラグメント)と、タブを持つアクション バーを備えています。
これに似ています。
アクションバーのタブをクリックすると、「外側」のフラグメントが変更され、そのときの内側のフラグメントは、2つのフラグメントが入れ子になったフラグメント(1.左の小さなリストフラグメント、2.幅の広いコンテンツフラグメント)になっています。
私は今、フラグメント、特にネストされたフラグメントを置き換えるためのベストプラクティスが何であるかについて考えています。 ViewPager はサポート ライブラリの一部であり、このクラスのネイティブの 4.x 代替はありません。私の感覚では、「非推奨」であるように見えます。 - http://developer.android.com/reference/android/support/v4/view/ViewPager.html
それから、Android 4.2 のリリースノートを読みました。
ChildFragmentManager
に関するリリースノートを読みましたが、4.0 と 4.1 をターゲットにしているので、これも使えません。
ChildFragmentManager
は4.2のみ使用可能です
- http://developer.android.com/about/versions/android-4.2.html#NestedFragments
- http://developer.android.com/reference/android/app/Fragment.html#getChildFragmentManager()
残念ながら、サポート ライブラリなしでフラグメントを使用するためのベスト プラクティスを示す良い例は、Android 開発者ガイド全体でも、ほとんどありません。
サポート ライブラリやそれに付随するすべてを使用せずに、ネストされたフラグメントで 4.1 アプリを書くことは、単純に不可能なのでしょうか。(Fragment の代わりに FragmentActivity を使用する必要がある、など?)? また、ベストプラクティスは何でしょうか?
現在、私が開発で抱えている問題は、まさにこの文言です。
<ブロッククオートAndroid サポートライブラリは、ネストされたフラグメントをサポートするようになりました。 Android 1.6以降でネストされたフラグメントデザインを実装できます。
注意:レイアウトがフラグメントに含まれる場合、レイアウトをフラグメントに展開することはできません。
が含まれる場合、レイアウトをフラグメントに展開することはできません。
<fragment>
. ネストされたフラグメントは、動的にフラグメントに追加された場合のみサポートされます。
に動的に追加された場合のみサポートされます。
ネストされたフラグメントをXMLで定義すると、どうやら以下のようなエラーが発生するようです。
Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f090009, tag frgCustomerList, or parent id 0x7f090008 with another fragment for de.xyz.is.android.fragment.CustomerListFragment_
現時点での自分なりの結論は、2.xプラットフォームをターゲットにする気もない4.1でも、スクリーンショットにあるようなネストしたフラグメントはサポートライブラリなしでは不可能である、ということです。
(これは実際には質問というより wiki エントリかもしれませんが、もしかしたら誰かが以前にそれを管理しているかもしれません)。
更新しました。
参考になる回答があります。 フラグメントの中のフラグメント
どのように解決するのですか?
制限事項
そのため、どのバージョンの
FragmentManager
のどのバージョンを使ってもできません。
そのため、コードでフラグメントを追加しなければなりません。これは問題のように思えるかもしれませんが、長い目で見れば、レイアウトを超柔軟にすることになります。
そのため
getChildFragmentManger
? の背後にある本質は
childFragmentManager
の背後にある本質は、前のフラグメントのトランザクションが終了するまでロードを延期することです。そしてもちろん、それは 4.2 またはサポート ライブラリにおいてのみ自然にサポートされました。
ChildManager を使用しないネスト - 解決策
解決策、確かに!私はずっと前から、(
ViewPager
が発表されて以来)。
下記参照;これは
Fragment
であり、読み込みを延期するため
Fragment
はその内部で読み込むことができます。
は非常にシンプルで
Handler
は本当に本当に便利なクラスで、効果的にハンドラは現在のフラグメントトランザクションがコミットを終えた後にメインスレッド上で実行するスペースを待ちます (フラグメントがメインスレッド上で実行される UI に干渉するため)。
// Remember this is an example, you will need to modify to work with your code
private final Handler handler = new Handler();
private Runnable runPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
return inflater.inflate(R.layout.frag_layout, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
runPager = new Runnable() {
@Override
public void run()
{
getFragmentManager().beginTransaction().addFragment(R.id.frag_container, MyFragment.newInstance()).commit();
}
};
handler.post(runPager);
}
/**
* @see android.support.v4.app.Fragment#onPause()
*/
@Override
public void onPause()
{
super.onPause();
handler.removeCallbacks(runPager);
}
私はこれを「ベストプラクティス」とは考えませんが、このハックを使ったライブのアプリがあり、まだ何の問題も発生していません。
私はまた、ビューページャーを埋め込むためにこの方法を使っています。 https://gist.github.com/chrisjenx/3405429
関連
-
[解決済み】このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
-
[解決済み] 新しいAndroid Fragmentをインスタンス化するためのベストプラクティス
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?
-
[解決済み] ViewPagerとフラグメント - フラグメントの状態を保存する正しい方法は何ですか?
-
[解決済み] Android.app Fragments vs. android.support.v4.app using ViewPager?
-
[解決済み] フラグメント・イン・フラグメント
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信
-
[解決済み] フラグメントかサポートフラグメントか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] フラグメント・イン・フラグメント
-
[解決済み] 断片の中の断片
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] アンドロイドボタンセレクター