1

我必须在所有选项卡中添加 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);
    }
4

1 回答 1

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. When the tab changes, you should first call removeView()on the ListView's current parent and then addView()it to the new parent.
于 2012-12-03T15:43:45.097 回答