Android - 动态添加标签

时间:2012-12-03 15:23:22

标签: android tabs

我必须在所有选项卡中添加n个具有相同布局的选项卡(比如在xml中声明的llItemList)。在我创建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);
    }

1 个答案:

答案 0 :(得分:1)

您应该通过指定

指定TabSpec
  • 视图的ID,
  • 创建视图内容的TabHost.TabContentFactory

你的代码同时做到了!

将您的代码更改为以下之一:

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. 当标签更改时,您应首先在ListView的当前父级上调用removeView(),然后将addView()调用到新父级。