2010-10-06 53 views
19

以下情况: 我有TabActivity与例如三个选项卡,TabA,TabB,TabC。Android。如何更改标签内的活动

TabC的活动(Act_C_1)中有一个按钮。所以如果用户点击该按钮,另一个活动(Act_C_2)应该出现在TabC中。

我在此先感谢您的任何建议/意见。

穆尔

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));    
    }   
} 
+1

请检查此链接:[安卓:如何拥有TabActivity的一个选项卡下的多个活动(http://gamma-point.com/content/android-how-have-multiple-activities-under -single-tab-tabactivity) – Ian 2011-11-25 04:47:30

回答

-2

处理按钮的onClick事件

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

感谢

+0

不错的建议,但TabActivity不起作用......至少我是这样的。 – Tima 2010-10-06 14:18:29

+0

嗨请发布您的代码片段...我会尝试编辑它。 – 2010-10-06 15:16:41

+0

我包含了我的代码的重要部分。 '不工作'是不正确的,但如果我这样做,标签活动将完成。我想要的是,只要Tabactivity中的一项活动即可完成,另一项将在Tab内开始。 – Tima 2010-10-07 12:28:20

-1

只需添加这对所有标签:

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

选项卡中的活动可以通过以下方式进行切换。

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

  1. 我们有一个接头主机,活动(比如列表),从中我们需要去到下一个活动(说的详细点的点击项)同一个标签。为此,我们可以使用替换活动的概念。同时设置所选标签的标志和其他知道现在正在显示的细节的标志

  2. 当我们按回时,我们应该在同一个标​​签下获得先前的活动。为此,而不是再次替换活动,我们可以刷新选项卡,同时使用选定的选项卡的特定标志。此外,如果标志显示的细节是真实的,我们会去的名单在同一个标​​签,否则我们将tabwidget(正常使用onBackPressed的)之前去活动

的代码可以如下..

  1. 对于从列表到详细...

(这可以在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(); 
        } 
    } 
    

这里最重要的部分是 Constants.LIST_ACTIVITY = 1;它表明我们是在哪个标签。所以相应的活动将其作为0,1,2值...等

的标签活动被刷新时再加载正确的列表(Activty),我们必须包括这在TabWidget的onCreate创建标签后

tabHost.setCurrentTab(Constants.LIST_ACTIVITY); 
+2

+1,只是一个通知 - 上面的“上下文”是指包含的活动,而不是容器(TabActivity)。哦,我不知道为什么没有跟随Android的意图设计和使用Constants.LIST_ACTIVITY代替.. – kellogs 2011-08-13 22:43:10

+0

雅纠正情况下指的是包括标签所包含的活动。 – 2011-08-16 09:33:09

+0

我不同意,context *是TabActivity,否则你不能将它转换为ActivityGroup。 – 2011-08-17 09:48:58

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