TabHost中的另一项活动?

时间:2011-07-13 09:44:43

标签: android android-tabhost

我制作了一个标签主机并在其中显示了4个标签,如下面的代码

    /** Called when the activity is first created. */
      @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    TabHost tabHost = getTabHost();

    tabHost.addTab(tabHost.newTabSpec("list").setIndicator("List").setContent(
            new Intent(this, List.class)));
    tabHost.addTab(tabHost.newTabSpec("profile").setIndicator("Profile").setContent(
            new Intent(this, Profile.class)));
    tabHost.addTab(tabHost.newTabSpec("criteria").setIndicator("Criteria").setContent(
            new Intent(this, Criteria.class)));
    tabHost.addTab(tabHost.newTabSpec("more").setIndicator("More").setContent(
            new Intent(this, More.class)));
    }
 }

在个人资料中,我有一个按钮,可以编辑用户的个人资料,当我点击按钮时,它调用方法如下

    @Override
public void onClick(View v) {
System.out.println("Veer");
    Intent intent = new Intent().setClass(this, EditProfile.class);
Intent intent = new Intent(this, EditProfile.class);
}

在哪里显示EditProfile,但选项卡不可见,因为在iPhone中它始终可见,现在应该怎么做才能使我的选项卡位于上方并且EditProfile位于“配置文件”选项卡中?

2 个答案:

答案 0 :(得分:1)

进行Profile活动extends ActivityGroup
然后将以下代码添加到onClick(View v)

View view = getLocalActivityManager().startActivity("EditProfile", 
        new Intent(v.getContext(),EditProfile.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
        .getDecorView();
setContentView(view);

答案 1 :(得分:1)

可以按以下方式切换选项卡中的活动。

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

  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);