1

すべてのタブに、同じレイアウト (xml で宣言されている llItemList など) の n 個のタブを追加する必要があります。以下のスニペットでは、n 個のタブを作成します。すべてのレイアウトは、タブ自体のコピーではなく、llItemList の同じコピーを使用します。動的に作成されるすべてのタブで llItemList の個別のコピーを作成する方法を教えてください。前もって感謝します

    //---------------------------------
    // insert the tabs dynamically
    //--------------------------------- 
    for (int i=1; i<=n; i++){
        final String tabName = "tab" + Integer.toString(i);
        final TabSpec ourSpec = th.newTabSpec(tabName);
        ourSpec.setContent(new TabHost.TabContentFactory() { 
            public View createTabContent(String tag) { 
            ourSpec.setContent(R.id.llItemList);   
            TextView text = new TextView(NewTicket.this);
            String tabText = tabName;
            text.setText("You've created a new tab " + tabText); 
            return (text);
            }
        });
        ourSpec.setIndicator(tabName);
        th.addTab(ourSpec);
    }
4

1 に答える 1

1

TabSpecどちらかを指定して指定する必要があります

  • ビューのID、または
  • TabHost.TabContentFactoryビューコンテンツを作成するa

あなたのコードは両方を行います!

コードを次のいずれかに変更します。

for (int i=1; i<=n; i++){
    final String tabName = "tab" + Integer.toString(i);
    final TabSpec ourSpec = th.newTabSpec(tabName);
    ourSpec.setContent(new TabHost.TabContentFactory() { 
        public View createTabContent(String tag) { 
            TextView text = new TextView(NewTicket.this);
            String tabText = tabName;
            text.setText("You've created a new tab " + tabText); 
            return (text);
        }
    });
    ourSpec.setIndicator(tabName);
    th.addTab(ourSpec);
}

また

for (int i=1; i<=n; i++){
    final String tabName = "tab" + Integer.toString(i);
    final TabSpec ourSpec = th.newTabSpec(tabName);
    ourSpec.setContent(R.id.llItemList);   
    ourSpec.setIndicator(tabName);
    th.addTab(ourSpec);
}

編集:

ListViewコメントで述べたように、の同じインスタンスを保持するには、次のようにします。

  1. 登録するTabHost.OnTabChangeListener
  2. タブが変更されたら、最初removeView()にListViewの現在の親を呼び出し、次にaddView()新しい親を呼び出す必要があります。
于 2012-12-03T15:43:45.097 に答える