本文转自: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实现,
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.myactivitygroup);//其实这个layout里面只有一个id为myactivitygroup _view的LinearLayout
- container=(LinearLayout) findViewById(R.id.myactivitygroup _view);//
- container.removeAllViews();
- Intent intent=new Intent(MyActivityGroup .this,SubAActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Window subActivity=getLocalActivityManager().startActivity("SubAActivity",intent);
- View view=subActivity.getDecorView();
- container.addView(view); //下面的代码是为了保证subactivity显示正常,必须写在这行后面,不然的话,view对象尚未产生,然后。。。你懂的,addView应该也是用InFlate实现的
- LinearLayout.LayoutParams params=(LayoutParams) view.getLayoutParams();
- params.width=LayoutParams.FILL_PARENT;
- params.height=LayoutParams.FILL_PARENT;
- view.setLayoutParams(params);
- }
复制代码
下面是从SubAActivity跳转到SubBActivity,(从SubBActivity返回SubAActivity实现方法一样,只不过放的位置不一样)假设我在一个listview的OnClickListener里面实现
- list.setOnGroupClickListener(new OnGroupClickListener() {
-
- @Override
- public boolean onGroupClick(ExpandableListView parent, View v,
- int groupPosition, long id) {
- LinearLayout container=(LinearLayout)((ActivityGroup)getParent()).getWindow().findViewById(R.id.myactivitygroup _view);//注意这里,还是获取group的view
- container.removeAllViews();
- Intent intent=new Intent(SubAActivity.this, SubBActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Window subActivity=((ActivityGroup)ProvinceParkActivity.this.getParent()).getLocalActivityManager().startActivity("SubBActivity",intent);
- View view=subActivity.getDecorView();
- container.addView(view);
- LinearLayout.LayoutParams params=(LayoutParams) view.getLayoutParams();
- params.width=LayoutParams.FILL_PARENT;
- params.height=LayoutParams.FILL_PARENT;
- view.setLayoutParams(params);
- return true;
- }
- });
复制代码
仔细观察你会发现,这两段代码的实现思路是一样的,另外对于activitygroup的实现方式也大概能有些推测。
在subactivity中不要调用finish,不然整个activity树都会挂掉,你仔细观察subactivity和tab之间的切换,会发现很有意思。
刚才写了一半,帖子竟然刷新了,真是悲剧 - -#
好啦,我现在要出发啦,祝大家新年快乐!~
补充内容 (2011-1-30 16:43):
怎么不能编辑 - -
我又想了下container.addView(view); //下面的代码是为了保证subactivity显示正常,必须写在这行后面,不然的话,xxxxxxxxx
这个说法应该是不对的,xxxxxx的部分。
分享到:
相关推荐
- 使用`FragmentTabHost`或`TabLayout`配合`ViewPager`:这允许你在单个Activity中动态管理多个Fragment,每个Fragment代表一个Tab,同时可以在每个Tab内再添加一个`TabLayout`进行嵌套。 总的来说,虽然在...
在TabActivity中,每个Intent对应一个Activity,当用户点击某个标签时,系统会通过这个Intent启动相应的Activity。 4. **ActivityGroup**:在TabActivity的实现中,ActivityGroup扮演了一个特殊的角色。它是...
首先,TabActivity是Android早期版本中的一个组件,它允许在一个Activity中包含多个Tab,每个Tab对应一个单独的Activity。然而,随着Android API的发展,现在更推荐使用Fragment和TabLayout结合的方式,因为这种方式...
在TabActivity中,我们需要设置TabHost并添加对应的TabSpec(标签规范),每个TabSpec对应一个页面或Activity。 1. **初始化TabHost** - 在布局XML文件中,为TabHost定义一个根元素`<TabHost>`,并设置其ID为`...
在Android开发中,`TabActivity`是早期用来创建带有选项卡式导航的应用界面的一个关键组件。这个组件允许用户通过在不同的Tab之间切换来浏览多个视图或者内容区域。`TabActivity`结合了`TabHost`和`TabWidget`,使得...
在Android应用开发中,"Fragment + TabActivity实现标签内跳转"是一种常见的界面设计模式,它使得用户可以在同一个界面上通过不同的Tab切换查看不同的内容。TabHost是Android系统提供的一个用于实现标签页功能的组件...
在"Android_Tab滑屏"项目中,每个Tab可能会由一个单独的Fragment表示,每个Fragment承载特定的内容或功能。 接下来,ViewPager是Android Support Library中的一个控件,它允许用户左右滑动页面来浏览多个视图。当与...
在"HelloTab"的例子中,开发者可能创建了一个包含多个标签的`TabActivity`,每个标签对应一个不同的`Activity`或`Fragment`。这些`Activity`或`Fragment`可能展示了不同的功能,如新闻列表、天气预报或个人设置等。 ...
在Android开发中,TabActivity是早期用于实现分页视图的一种方式,它允许用户通过不同的Tab切换不同的页面。本文将详细讲解如何在Android应用中使用TabActivity实现分页功能,并结合源码分析其工作原理。 首先,让...
`Fragment`是Android应用中的一个可重用组件,它代表UI的一部分,可以在Activity中添加、删除或替换。这样,我们可以通过多个`Fragment`来实现不同页面的切换,从而达到`TabActivity`的效果。 **创建Fragment** 1....
2. **创建Tab**:要创建一个`TabActivity`,首先需要在布局文件中设置`TabHost`和`TabWidget`,然后在代码中通过`TabHost.setup()`方法初始化`TabHost`。接着,使用`TabHost.addTab()`方法为每个标签添加内容,指定...
ActivityGroup 的优势还在于,让一个主场景能拥有多个逻辑处理模块,主场景不再负责子场景逻辑,主场景只负责切换场景的逻辑,每一个 Activity(子场景)拥有一个逻辑处理模块,一个 ActivityGroup 有多个 Activity...
它是一个特殊的Activity,允许开发者在一个Activity中展示多个Tab,每个Tab可以包含不同的Fragment或Activity。然而,随着Android设计指南的更新,现在推荐使用FragmentTabHost或ViewPager配合Fragment来实现类似...
在Android开发中,`TabActivity`是早期API版本中用于实现多标签页切换的一种方式。本文将深入探讨`TabActivity`的使用,以及如何通过源码理解和应用它,同时也会介绍一些相关的工具来辅助开发。 `TabHost`是`...
它是一个特殊的Activity,能够管理和显示多个Tab,每个Tab对应一个Activity或Fragment。然而,`TabActivity`已经在Android API Level 13中被弃用,现在推荐使用`TabLayout`配合`ViewPager`来实现类似的功能。下面...
1. 初始化`TabHost`:首先,在布局文件中定义一个`TabHost`,然后在Activity的`onCreate`方法中通过`TabHost.setup()`方法对其进行初始化。 2. 添加选项卡:使用`TabHost.newTabSpec()`方法创建新的`TabSpec`,设置...
在Android应用开发中,Tab功能通常用于展示多个相关的视图或者内容区域,用户可以通过点击不同的Tab切换不同的界面。Google在Android设计指南中建议使用现代化的组件来替代旧有的TabActivity,因此,我们可以使用...
在Android应用开发中,`TabActivity`是一种常见的用于创建多标签界面的设计模式,它允许用户在不同的内容之间切换,每个标签通常对应一个单独的Activity。然而,在实际开发中,我们可能会遇到一个问题:如何在`...