8

これが、私のアプリケーションがタブレットでやりたいことです。フラグメント (0) には、フラグメント (1)...(n) を次のように表示するメニューがあります。

-----------------
|   |   |   |   |
|   |   |   |   |
|(0)| X | X | X |
|   |   |   |   |
|   |   |   |   |
-----------------
 becomes
-----------------
|   |   |   |   |
|   |   |   |   |
|(0)|(1)| X | X |
|   |   |   |   |
|   |   |   |   |
-----------------
 and then
-----------------
|   |   |   |   |
|   |   |   |   |
|(0)|(2)|(1)| X |
|   |   |   |   |
|   |   |   |   |
-----------------
 etc... 

Fragment0 は移動せず、他のものは右にシフトされます。端から右に出る破片は破壊されます。

そこで、水平 LinearLayout を使用して XML レイアウトをセットアップし、適切な ID (fragment0... fragment3) を持つ 4 つの FrameLayout を含めます。

Fragment0 と Fragment1 をインスタンス化して表示することはできますが、次のように右にシフトすることはできません。

ERROR/AndroidRuntime(343): FATAL EXCEPTION: main
java.lang.IllegalStateException: Can't change container ID of fragment ...

私が見つけた唯一の関連する質問はthis onethat oneで、提供されているさまざまなソリューションをすべて試してみましたが、運がありませんでした。

FragmentTransaction.remove()に続いて.add()、試して.replace()、それらをさまざまな順序で試し、途中でコミットし(誰かが提案したように2回コミットしようとしても)、呼び出しを試みましたaddToBackStack()...まだ運がありません。

問題は、FragmentTransaction を使用してこのようにフラグメントを移動できるかどうかです。はいの場合、私は何を間違っていますか (おまけに、それをアニメーション化することは可能ですか?)。いいえの場合、これを実装する適切な方法は何ですか?

毎回フラグメントを再インスタンス化したくないことに注意してください (それぞれが Web 上でいくつかのクエリを実行するため、時間がかかる場合があります)。すべてのデータをアクティビティに抽出して再作成することは可能ですが、可能であればそれを行いたくありません...

4

2 に答える 2

3

これがあなたが望んでいるものかどうかはわかりませんが、あなたの問題に関する小さなサンプルを作成しました. 基本的に、レイアウト ファイルを使用して右シフトを行い、シフト フラグメントごとにラッパー コンテナーを用意します。コード サンプルは、答えとしては少し大きすぎるので、ここで見つけることができる要点に投稿しました。そのサンプルでは、​​各ListFragment項目 (フラグメント 1 -> フラグメント 2 -> フラグメント 3) を押して動作を確認します。

于 2012-11-28T15:51:36.730 に答える