首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

【转】TabActivity中某一个tab内切换activity的步骤

2012-09-28 
【转】TabActivity中某一个tab内切换activity的方法本文转自:http://www.devdiv.com/forum.php?modviewthre

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

本文转自:http://www.devdiv.com/forum.php?mod=viewthread&tid=47634&page=1

?

之前写的程序要用到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之间的切换,会发现很有意思。

刚才写了一半,帖子竟然刷新了,真是悲剧 - -#
好啦,我现在要出发啦,祝大家新年快乐!~??

补充内容 (2011-1-30 16:43):
怎么不能编辑 - -
我又想了下container.addView(view);??//下面的代码是为了保证subactivity显示正常,必须写在这行后面,不然的话,xxxxxxxxx
这个说法应该是不对的,xxxxxx的部分。

?

1 楼 MyLar 2011-09-22   跳转了几次之后报堆栈溢出了 2 楼 javalover00000 2011-09-23   to: MyLar
本文是转载来的,我自己还没实际写过这个代码,只是觉得这个方法应该是可行的,堆栈溢出,可能需要注意下,addView 应该是每次都是addView的关系吧,你可以通过上面的原文链接去问原作者 3 楼 xyg1990 2011-09-28   感谢分享!!!!!!

热点排行