2

FragmentTransactionを使用して、フローティングフラグメントを膨張させてアクティビティに追加することにより、フローティングフラグメントを動的に作成しようとしています。

コンテナに(コンテナ内で作成したFrameLayoutに)追加すると、その下のすべてのセクションが押し下げられ、すべてのビューが変更されます(フラグメントの有無にかかわらずビューを同じに見せたい) .

フロートしてビューを変更しない DialogFragment の実装を調べたところ、FragmentTransaction.add(int containerViewId...) メソッドを containerViewId として 0 で使用していることがわかりました。Google のドキュメントには、「0 の場合、コンテナーに配置されません」と書かれているだけです。containerViewId に 0 を入力し、View から FrameLayout を削除すると、Fragment は表示されませんでした。

4

1 に答える 1

2

あなたが直面している問題はFrameLayout、すでに存在するレイアウトの子であるフローティングフラグメントを追加するという事実に起因すると思います。これは、既に見たように、現在のレイアウトを変更して新しいフラグメントのためのスペースを作ります。たとえば、現在のレイアウトが次のような場合 (これは単なる例です):

<LinearLayout>
    <FrameLayout android:id="@+id/here_add_floating_fragment"/>
    <the rest of the layout file with the content that should hold its position />
</LinearLayout>

フローティング フラグメントがFrameLayout上記のようなレイアウトのライクに追加されると、残りのビューは実際に移動されてスペースが確保されます。

FrameLayoutこれを防ぐには、次のように現在のレイアウトを保持するようにレイアウトを変更する必要があります。

<FrameLayout android:id="@+id/here_add_floating_fragment"> 
      <LinearLayout>
          <the rest of the layout file with the content that should hold its position />
      </LinearLayout>
</FrameLayout> 

ここで、新しいフラグメントを追加すると、現在のフラグメントがそのまま残り、フラグメントがその子のスタックViewsとして上に表示されます。FrameLayout

于 2012-06-26T14:28:11.817 に答える