ActivityGroup的浅薄理解
来源:互联网 发布:装修材料演示软件 编辑:程序博客网 时间:2024/04/29 07:59
用ActivityGroup可以实现多个Activity的切换,ActivityGroup的出现打破了android单窗口管理的理念,但是google在3.0版本后就用新的类来代替它了,这个类叫fragment ,但是现在还是有很多应用都在用ActivityGroup,还是值得了解的。
本例将介绍ActivityGroup+ScrollView来实现TabActivity的页面效果
先来看看主Activity的配置文件:
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent"> <LinearLayout android:background="@android:color/black" android:layout_gravity="bottom" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/but1" android:layout_width="150dp" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:text="第一页" /> <Button android:id="@+id/but2" android:layout_width="150dp" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:text="第二页" /> <Button android:id="@+id/but3" android:layout_width="150dp" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:text="第三页" /> </LinearLayout> <ScrollView android:measureAllChildren="true" android:id="@+id/container" android:layout_height="fill_parent" android:layout_width="fill_parent"> </ScrollView> </LinearLayout>
新建一个Activity继承ActivityGroup
ActivityGroupTestActivity.java
package dxd.activitygroup.test;import android.app.ActivityGroup;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ScrollView;public class ActivityGroupTestActivity extends ActivityGroup {ScrollView container ;Button but1 ;Button but2 ;Button but3 ; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); container = (ScrollView)findViewById(R.id.container); container.removeAllViews();container.addView(getLocalActivityManager().startActivity("ActivityA", new Intent(ActivityGroupTestActivity.this, ActivityA.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView()); setListener(); } public void setListener(){ but1 = (Button)findViewById(R.id.but1); but2 = (Button)findViewById(R.id.but2); but3 = (Button)findViewById(R.id.but3); but1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {container.removeAllViews();container.addView(getLocalActivityManager().startActivity("ActivityA", new Intent(ActivityGroupTestActivity.this, ActivityA.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView());}}); but2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {container.removeAllViews();container.addView(getLocalActivityManager().startActivity( "ActivityB", new Intent(ActivityGroupTestActivity.this, ActivityB.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView());}}); but3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {container.removeAllViews();container.addView(getLocalActivityManager().startActivity( "ActivityC", new Intent(ActivityGroupTestActivity.this, ActivityC.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView());}}); }}
到这里主要的代码就完了,其他的Activity文件和对应的布局文件,那就看自己的需求了。别忘在manifest文件中声明者三个Activity哦。
下面来介绍一下,从文档中可以看到ActivityGroup的类继承结构如下:
java.lang.Object ↳ android.content.Context ↳ android.content.ContextWrapper ↳ android.view.ContextThemeWrapper ↳ android.app.Activity ↳ android.app.ActivityGroup
而从文档中可以看出,其共用方法只有两个
getCurrrentActivity():返回一个Activity对象
getLocalActivityManager():返回LocalActivityManger对象,这个类是专门为ActivityGroup设定的,大概就是绕过android的单窗口机制,去直接调用启动Activity的系统线程,这个LocalActivityManager在实现原理上也是值得研究的。
其实在ActivityGroup中主要就是通过getLocalActivitymanager()来获得LocalActivityManager对象,通过这个对象来startActivity !!! 由文档可以查出这个方法:Window startActivity(String id, Intent intent)所以getDecorView()是返回的Window对象调用的。
- ActivityGroup的浅薄理解
- TabActivity的浅薄理解
- libuv的浅薄理解
- 对tracking的浅薄理解
- 我对AJAX的一点浅薄理解
- 关于网络编程相关的浅薄理解
- 关于spring AOP的浅薄理解
- 对于注解的浅薄理解,有待修正
- 对Spring的AOP的浅薄的理解
- 关于闭包的浅薄理解——笔记
- 对java String类型字符串的一些浅薄理解
- 19.Windows跨模块内存管理的浅薄理解
- ActivityGroup实现界面切换的理解
- 浅薄
- 才意识到我的浅薄.....
- fbo的个人浅薄了解
- 浅薄”绝不该是中国程序员的性格特征
- 浅薄的人生经历和思考
- windows下 Oracle 增量备份脚本文件
- Android之Broadcast, BroadcastReceiver(广播)
- 如何远程管理服务器
- UTF8默认编码下的MYSQL命令框中输入汉字显示乱码的问题
- Jsp页面中的table利用ie导出到Excel
- ActivityGroup的浅薄理解
- C#语言的几个层次
- 使用spring+springMVC 组合开发,声明式事务失效
- 读《个性化推荐评价方法综述-周涛》
- GREENPLUM介绍之数据库管理(九)- 使用GPLOAD实现无落地文件的高速加载
- SGU 125. Shtirlits 剪枝技巧
- Chrome安装Debug版FlashPlayer常见的问题
- pl/sql转义字符
- hdu 2029 Palindromes _easy version