在TabActivity的FrameLayout中启动另一个Activity

时间:2011-02-03 05:21:25

标签: android android-activity tabactivity

我正在尝试制作一个在屏幕底部有4个标签的应用程序。

所有这些都包含活动(意图)。

我想将任何Activity导航到另一个活动。但是想让TabWidget保持可见。

如果你知道的话,请尽快通知我。


Shaiful

3 个答案:

答案 0 :(得分:3)

由于更换活动而发生错误的问题可以通过以下方式解决。

首先让我们了解一下流程:

  1. 我们在Tab主机中有一个活动(比如一个列表),我们需要在同一个标​​签下转到下一个Activity(说明被点击项目的详细信息)。为此,我们可以使用替换活动的概念。还可以设置所选选项卡的标记以及其他用于了解现在正在显示详细信息的标记

  2. 当我们按下时,我们应该在相同的选项卡下获取上一个活动。为此,我们可以在使用选中的选项卡的特定标志时刷新选项卡而不是再次替换活动。此外,如果显示详细信息的标志为true,我们将在同一个标​​签中列出该列表,否则我们将在tabwidget之前进行活动(正常使用onBackPressed)

  3. 代码可以如下..

    1. 从列表到详细信息......
    2. (这可以在onClickListener中)

      private OnClickListener textListener = new OnClickListener() {
      
          @Override
          public void onClick(View v) {
              Constants.SHOW_DETAILS = true;
              Intent intent = new Intent(context, DetailsActivity.class);
              replaceContentView("activity3", intent);
              }
      };
      
      public void replaceContentView(String id, Intent newIntent) {
          View view = ((ActivityGroup) context)
                  .getLocalActivityManager()
                  .startActivity(id,
                          newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                  .getDecorView();
          ((Activity) context).setContentView(view);
      
      }
      
      1. 当后退完成后,我们覆盖选项卡下每个活动的BackPressed以再次从详细信息屏幕转到列表

        @Override
          public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        if (MathHelper.SHOW_DETAILS) {
            Log.e("back", "pressed accepted");
            Constants.LIST_ACTIVITY = 1;
            Constants.SHOW_DETAILS = false;
            Intent intent = new Intent(this, Tab_widget.class);
            startActivity(intent);
            finish();
          }
         }
        
      2. 这里最重要的部分是 Constants.LIST_ACTIVITY = 1;它指示我们所在的选项卡。因此相应的活动将其值设为0,1,2 ...等

        再次刷新选项卡活动时加载正确的列表(Activty),我们必须在创建选项卡后将其包含在TabWidget onCreate中

        tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
        

答案 1 :(得分:1)

这是在Tabs with multiple activities in a single tab中实施的。

但是,当多次调用活动时会出现StackOverFlow错误。尝试很努力但无法解决..请有人告诉方法来解决这个问题

还需要替换选项卡中的活动,但需要替换子活动。怎么做?

答案 2 :(得分:1)

任何一刻可能只有一项活动。有关此here

的文档