Android系统。如何更改选项卡中的活动

时间:2010-10-06 10:47:42

标签: android android-tabhost tabactivity

以下情况: 我有TabActivity,例如三个标签,TabA,TabB,TabC。

TabC的活动(Act_C_1)中有一个按钮。因此,如果用户单击该按钮,则应在TabC中发生另一个活动(Act_C_2)。

我提前感谢您提出任何建议/想法。

穆尔

UPD:

这是我的代码

TabActivity有三个活动:

public class TabScreen extends TabActivity
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.tab_menu);

        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        intent = new Intent().setClass(this, SecondActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, ThirdActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, FourthActivity.class);
        spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent);
        tabHost.addTab(spec);
    }

}

活动'Act_C_1'或FourthActivity.java:

public class FourthActivity extends Activity implements OnClickListener
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fourth);

        Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter);
        BtnWeiter.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) 
    {                    
        // I also tried to use LocalActivityManager
        // TabActivity parentTabActivity = (TabActivity) getParent();            
        // LocalActivityManager manager = parentTabActivity.getLocalActivityManager();
        // manager.destroyActivity("tab_3", true);
        // manager.startActivity("tab_3", new Intent(this, FourthActivity.class));
        finish();
        startActivity(new Intent(this, FourthActivity.class));            
    }        
}

4 个答案:

答案 0 :(得分:24)

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

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

  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 :(得分:0)

只需使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 标记替换必要标签的活动。

intent = new Intent().setClass(this, YourActivity.class);
spec   = tabHost.newTabSpec("tab1").setIndicator("Tab1",null)
        .setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);

答案 2 :(得分:-1)

只需为所有标签添加:

yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        getTabHost().setCurrentTab(0);
    }
});

答案 3 :(得分:-2)

处理按钮的onClick事件

完成()活动 添加startActivity方法以启动另一个活动。

由于