0

独自の「画面」でフラグメントを使用する方法を探していました。

私のシナリオ:

  • FragmentActivity->レイアウト:これらのタブを備えたタブホスト:ホーム| ネットワーク| フィード

  • HomeFragment->レイアウト:2つのボタンを使用して、これらのボタンの画面を作成する必要がありますが、その方法がわかりません。表示されている要素を非表示にして、「ボタン画面」に必要な要素のみを表示している可能性があります

  • NetworkFragment->レイアウト:n個のボタンとn個の画面も

  • FeedsFragment->レイアウト:n個のボタンとn個の画面も

タブホストは正常に動作しています。タブ(フラグメント)を切り替えることができますが、フラグメント画面でそのボタンをクリックして、フラグメントタブ画面以外の画面を表示する必要があります。

4

1 に答える 1

5

使用したいのはFrameLayoutです。これにより、ビューのスタックが可能になります。そのドキュメントの一部には次のように書かれています。

子ビューはスタックに描画され、最後に追加された子が一番上に表示されます。

これは、Androidフレームワークで頻繁に使用され、次のコードスニペットのように空のビューやリストビューを表示するなどのタスクを実行します。このスニペットは、ListViewまたはTextViewのいずれかを表示できます。

    <FrameLayout
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1" >
    <!-- Here is the list. Since we are using a ListActivity, we
         have to call it "@android:id/list" so ListActivity will
         find it -->
    <ListView android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:drawSelectorOnTop="false"/>

    <!-- Here is the view to show if the list is emtpy -->
    <TextView android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="No items."/>

</FrameLayout>

レイアウトを膨らませた後、最初の要素が下部にあり、最後の要素が下部にあることに注意してください。この特定の例では、これは、TextViewが親と一致する(つまり、親を埋める)ため、表示されるのはTextViewだけであることを意味します。

他のビューを表示したい場合は、他のビューを非表示にすることができます。

findViewById(android.R.id.empty).setVisible(View.INVISIBLE);

複数のビュー(画面と呼びます)がある場合は、それらをループして、表示したくないビューを非表示に設定して、表示したいビューを表示します。

より洗練されたものにしたい場合は、フラグメントを使用して同じ手法を実行できることに注意してください。これについては、柔軟なUIの構築と呼ばれる優れたAndroidトレーニング記事があります。引き続きFrameLayoutを使用しますが、Fragmentトランザクションを利用します。ただし、フラグメントに他のフラグメントを含めることはできず、TabHost内の複数のフラグメントにすでに依存しているため、特定のケースでは機能しない可能性があります。したがって、上記のより単純なFrameLayoutメソッドから始めてください。

于 2012-10-22T01:11:19.793 に答える