TabActivity中某一个tab内切换activity的方法

 之前写的程序要用到TabActivity,其中一个tab下有个多级列表,其实就是像“设置‘切换页面一样,倒是如果直接启动一个activity,你会发现这个activity会变成全屏的,和之前的TabActivity半毛钱关系木有,所以,当时我感觉这个问题很麻烦呢。
后来我进去TabActivity里面发现,TabActivity其实就是继承自ActivityGroup,然后想起来之前看到的一片文章,用ActivityGroup 来实现自定义TabActivity功能,到这里其实应该就很简单了,无非是为TabActivity增加一个subActivity,不过这里我嫌麻烦,索性不和TabActivity扯上关系,于是 就用了一个嵌套ActivityGroup 的实现方式,其实就是把一个TabActivity的子页换成一个ActivityGroup ,然后这个ActivityGroup 下面再放上几个subactivity。当然,ActivityGroup 继承自Activity,所以你也要把它当作activity去mainfest注册一下。
     我马上就要坐车回家啦,时间比较紧,格式丑陋点,大家见谅。下面是关键代码:

     TabActivity的用法我就不说了,一搜一大把,关键是ActivityGroup 内activity的切换,一个继承自ActivityGroup 的class MyActivityGroup,MyActivityGroup在TabActivity里面的使用和普通activity一样,两个子activitySubAActivity.class和SubBActivity.class, 首先是MyActivityGroup 启动时要启动一个subactivity,我们启动SubAActivity.class,MyActivityGroup 的onCreate实现,
  1. protected void onCreate(Bundle savedInstanceState) {
  2.                 // TODO Auto-generated method stub
  3.                 super.onCreate(savedInstanceState);
  4.                 setContentView(R.layout.myactivitygroup);//其实这个layout里面只有一个id为myactivitygroup _view的LinearLayout
  5.                 container=(LinearLayout) findViewById(R.id.myactivitygroup _view);//                
  6.                 container.removeAllViews();  
  7.         Intent intent=new Intent(MyActivityGroup .this,SubAActivity.class); 
  8.         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  9.         Window subActivity=getLocalActivityManager().startActivity("SubAActivity",intent);  
  10.         View view=subActivity.getDecorView();
  11.         container.addView(view);  //下面的代码是为了保证subactivity显示正常,必须写在这行后面,不然的话,view对象尚未产生,然后。。。你懂的,addView应该也是用InFlate实现的
  12.         LinearLayout.LayoutParams params=(LayoutParams) view.getLayoutParams();
  13.         params.width=LayoutParams.FILL_PARENT;
  14.         params.height=LayoutParams.FILL_PARENT;
  15.         view.setLayoutParams(params);
  16.         }
复制代码
下面是从SubAActivity跳转到SubBActivity,(从SubBActivity返回SubAActivity实现方法一样,只不过放的位置不一样)假设我在一个listview的OnClickListener里面实现
  1. list.setOnGroupClickListener(new OnGroupClickListener() {
  2.                         
  3.                         @Override
  4.                         public boolean onGroupClick(ExpandableListView parent, View v,
  5.                                         int groupPosition, long id) {
  6.                                         LinearLayout container=(LinearLayout)((ActivityGroup)getParent()).getWindow().findViewById(R.id.myactivitygroup _view);//注意这里,还是获取group的view
  7.                                         container.removeAllViews();  
  8.                                 Intent intent=new Intent(SubAActivity.this, SubBActivity.class);  
  9.                                 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  10.                                 Window subActivity=((ActivityGroup)ProvinceParkActivity.this.getParent()).getLocalActivityManager().startActivity("SubBActivity",intent);  
  11.                                 View view=subActivity.getDecorView();
  12.                                 container.addView(view);  
  13.                                 LinearLayout.LayoutParams params=(LayoutParams) view.getLayoutParams();
  14.                                 params.width=LayoutParams.FILL_PARENT;
  15.                                 params.height=LayoutParams.FILL_PARENT;
  16.                                 view.setLayoutParams(params);
  17.                                         return true;
  18.                         }
  19.                 });
复制代码
仔细观察你会发现,这两段代码的实现思路是一样的,另外对于activitygroup的实现方式也大概能有些推测。
在subactivity中不要调用finish,不然整个activity树都会挂掉,你仔细观察subactivity和tab之间的切换,会发现很有意思。
转自: http://www.devdiv.com/thread-47634-1-1.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值