1

リスト ビューがあり、このリスト ビューのタブ ビューを設定しようとしています。

場合によっては 3 つのオプションがあり、場合によっては 2 つ、場合によっては 1 になります。ここでわかるように

ここに画像の説明を入力

タブがクリックされると、タブバーのどの項目がクリックされたかに応じて、リストビューを新しいデータでリロードします。しかし、これは似たようなデータなので、同じリストビューになり、同じ xml レイアウトを使用したいと考えています。しかし、現在、私はこれを行うことができません。それを機能させることはできません。

これが私が持っているものです

 myTabHost =(TabHost) findViewById(R.id.TabHost01);
    myTabHost.setup();

    TabHost.TabSpec spec1 = myTabHost.newTabSpec("First Tab");
    spec1.setIndicator("First Tab", getResources().getDrawable(android.R.drawable.ic_menu_add));
    spec1.setContent(R.id.tab1);
    myTabHost.addTab(spec1);

    myTabHost.addTab(myTabHost.newTabSpec("Second Tab").
            setIndicator("Second Tab", getResources().getDrawable(android.R.drawable.ic_menu_edit)).setContent(R.id.tab2));

これは2つのタブ用に設定してから、私が持っているxmlで設定しています

<include
                android:id="@+id/tab1"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                layout="@layout/item_list_view">


            </include>

            <include
                android:id="@+id/tab2"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                layout="@layout/test">


            </include>

しかし、別のレイアウトではなく同じレイアウトを使用してデータをリロードしたいのですが、タブ .setContent を同じ ID に設定すると機能しませんか?

基本的な質問は、複数のタブに同じ xml を使用し、リスト ビューに異なるデータをロードする方法です。

それが重要な場合、タブバーは画像ではなくテキストで埋められます。これに関するいくつかのチュートリアルを見てきましたが、私の状況には役に立ちません https://www.youtube.com/watch?v=OeNC_sShJXs https://www.youtube.com/watch?v=1-u3toC6ctY

だから、これを設定するのに助けが必要です。

事前に助けてくれてありがとう:)

4

2 に答える 2

2

私が理解しているように、この質問には 2 つの部分が含まれます。

  1. プログラムによるタブの作成。
  2. タブ間で同じコンテンツ ビューを共有する。

最初の部分では、レイアウトに「空」を配置し、表示するタブに応じて後でTabHost呼び出すことができます。addTab()たとえば、レイアウト ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/TabHost01"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </TabWidget>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
        </FrameLayout>
    </LinearLayout>
</TabHost>

そして、でonCreate()

TabHost tabHost = (TabHost)findViewById(R.id.TabHost01);
tabHost.setup();
tabHost.addTab(tabHost.newTabSpec(...));
tabHost.addTab(tabHost.newTabSpec(...));

eachTabHost.TabSpecは、各タブのインジケータとコンテンツを指定します。

2 番目の部分については、単一の ウィジェットが必要でListView、ユーザーがタブを切り替えるとそのデータが変更されます。TabHostこれは、複数のタブに同じコンテンツがある場合でも問題なく処理できるため、実際には非常に簡単です。TabHost.TabContentFactory各タブに対してを設定し、それぞれが同じビューを返すようにするだけです。

例えば:

mListView = new ListView(this);

TabHost tabHost = (TabHost)findViewById(R.id.TabHost01);
tabHost.setup();
tabHost.addTab(tabHost.newTabSpec("1").setIndicator("First").setContent(mDummyTabContent));
tabHost.addTab(tabHost.newTabSpec("2").setIndicator("Second").setContent(mDummyTabContent));
tabHost.addTab(tabHost.newTabSpec("3").setIndicator("Third").setContent(mDummyTabContent));

wheremTabContentは次のように初期化されます。

private final TabHost.TabContentFactory mDummyTabContent = new TabHost.TabContentFactory()
{
    @Override
    public View createTabContent(String tag)
    {
        return mListView;
    }
};

次に、残りの最後のステップはTabHost.OnTabChangeListener、単一のデータを切り替える a を追加することですListView

tabHost.setOnTabChangedListener(mOnTabChangedListener);
mOnTabChangedListener.onTabChanged("1");

どこ:

private TabHost.OnTabChangeListener mOnTabChangedListener = new TabHost.OnTabChangeListener()
{
    @Override
    public void onTabChanged(String tabId)
    {
        String[] data;

        if (tabId.equalsIgnoreCase("1"))
            data = FIRST_ITEMS;
        else if (tabId.equalsIgnoreCase("2"))
            data = SECOND_ITEMS;
        else
            data = THIRD_ITEMS;

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(FakeTabViewActivity.this, android.R.layout.simple_list_item_1, data);
        mListView.setAdapter(adapter);
    }
};

アクティビティとレイアウト ファイルを含むサンプルの要点は、こちらから入手できます。

于 2014-12-21T23:28:46.270 に答える