【问题标题】:Alternatives to using an activity for each tab为每个选项卡使用活动的替代方法
【发布时间】:2011-04-26 10:47:52
【问题描述】:

场景是这样的。目前我正在使用以下代码

TabSpec setContent = tabhost.newTabSpec("tab")
                .setIndicator("tabview")
                .setContent(new Intent(tabhost.getContext(), someActivity.class));

但有人告诉我,每个选项卡不应与活动相关联,我们必须遵循类似这样的代码。

TabSpec setContent = tabhost.newTabSpec("tab").setIndicator("tabView").setContent(R.id.layout)

考虑一个场景,其中 tab1 调用相机应用程序,tab2 解析 XML,而 tab3 执行其他一些显示工作。我该如何解决这个问题?因为一旦选项卡被更改,我必须调用这些方法。如何创建单个活动并将所有职责分配给它?

【问题讨论】:

  • 是否在持有 TabHost 的实例中进行所有初始化?这可行吗?
  • “我该如何解决这个问题?” - 不要将它们放在标签中。根据您的描述,它们之间没有任何关系,应该是单独的活动(或者可能是 Honeycomb UI 上的单独片段),而不是一个活动中的选项卡。
  • @CommonsWave - 所以你告诉我将布局分配给 TabSpec 并使用 TabChangeListner 中的 Intent 作为单独的活动调用它们?

标签: android android-activity android-tabhost


【解决方案1】:

您可以使用仅显示视图的选项卡创建单个活动。唯一的问题是必须在标签内定义视图。

<FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
      <ListView 
        android:id="@+id/list1" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:layout_weight="1"/>
      <ListView
          android:id="@+id/list2"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="1" /> 
</FrameLayout>

然后,当在 TabActivity 中的 onCreate 内时:

TabHost tabs = getTabHost();
TabHost.TabSpec commentsTab = tabs.newTabSpec(TAB_TAG_1);
tabs.addTab(commentsTab.setContent(R.id.list1));

TabHost.TabSpec infoTab = tabs.newTabSpec(TAB_TAG_2);
tabs.addTab(infoTab.setContent(R.id.list2));

请注意,为了节省空间,我没有为任一选项卡指定指示符。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多