天天看点

Activity基础全面详解

1 创建Activity 1 新建class类,继承Activity方法 2 重写onCreate方法 3 设置setContent(R.layout.xxx.xml);设置显示内容 4 layout文件夹下面创建对应的xml文件。 5 在Manifest中注册Activity <activity android:name=".MainActivity" android:label="@string/app_name" > </activity> 若Activity就在Manifest所设置的唯一标识Package中,则只用 .类名就可以,否则要写完整包名.类名。且在.java文件中设置setContent时,要将R文件所在的包名导入。 注:也可直接创建Activity文件,比上述方便很多。

Activity基础全面详解
Activity基础全面详解

2 页面跳转 显示方式: 1 创建Intent对象: Intent intent=new Intent(context,XXX.class); 2用context.startActivity( )开启intent意图 startActivity(intent); 隐式方式:并不指定跳转Activity,而是让系统根据action进行过滤而选择启动Activity 1 空参构造intent: Intent intent=new Intent(); 2 设置action作为过滤标志: intent.setAction("清单文件中对应Aactivity的action name"); //intent. 3 开启意图 startActivity(intent); 注: 使用隐式跳转,一定要在清单文件中配置相应Activity的<action/>和<category/>标签,两个都要写。例: <intent-filter> <action android:name="activity_demo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 3 信息传递 3.1没有返回值 创建intent对象之后 使用intent.putExtra("keyname","msgvalue");添加想要发送的信息,可以添加多个。

接收方使用getIntent( )方法获取开启此Activity的Intent: Intent intent=getIntent(); 使用 intent.getXXXExtra("keyname");获取所发送过来的值: String str=intent.getStringExtra("keyname"); 3.2有返回值 发送方: Intent intent = new Intent(this, Activity_receiver.class); intent.putExtra("msg", "aanbsbdbds"); 开始方法变为: startActivityForResult(intent,request_code); 还要重写onActivityResult( )方法,用来接收返回值。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Intent intent=data;//返回的intent。 String msg=intent.getStringExtra("rep");//获取传回的数据。 Toast.makeText( this, "requestCode: " + requestCode + "resultCode: " + resultCode + "data: " + msg, 500).show(); } 接收方: Intent reint=getIntent(); reint.putExtra("key","vaule");//设置想要返回的信息 setResult(reponse_code,reint);//设置返回码,并将带有返回信息I的ntent返回 finish( )

4 生命周期 create (restart) start resume pause stop destory 4.1 单个Activity

Activity基础全面详解
Activity基础全面详解

4.2 Activity之间跳转 4.1.1覆盖原页面(A跳转B,B覆盖A) A pasue B create B start B resume A stop B按返回键或跳转按钮(其实都是会finnis()B) B pause A restart A start A resume B stop B destory 4.1.2跳转窗口样式(A跳转B,B以窗口样式弹出,A不会从屏幕消失) android:theme="@android:style/Theme.Dialog"; 对话框的样式设置 A pause B create B start B resume B按返回键 B pause A resume B stop B destory 5 savedinstanceState 现场保护 Activity中有一个onSaveInstanceState(Bundle outState)方法,当发生: 1设置更改; 2异常停止 时会调用该方法,并产生一个Bundle对象,将Aactivity当前状态保存下来。我们可以利用 outState.putInt("key_name",vaule);将我们想要保存的信息保存到bundle对象中。 然后在onCreate(Bundle savedInstanceState)中,用getInt("key_name");方法取出来。 例 设置更改(看电影由竖屏改为横屏,则会触发该事件) 在Activity第一次被创建时,调用onCreate方法,savedInstanceState=null,因为没有条件触发onSaveInstanceState(Bundle outState)方法。而设置改变以后,Activity也会被重建,再次执行onCreate方法时,Bundle对象就不为null了,此时就可以将我们保存在Bundle对象中保存的数据取出来。

6 Activity启动方式 android:launchMode="model_name";设置Aactivity的启动方式 1 standard 标准的,默认的 方式 每次跳转Activity都会新建一个,并压到栈中,先入后出,返回时一层层返回,直到最先压入的Activity. 2 singleTask 当跳转到某一个Activity时,会先判断栈里面是否已存在,若存在则将其前面的Activity全部出栈,让其处于栈顶;若栈中没有,则新建一个。 3 singleTop 跳转一个Activity时会判断栈顶是否就是所要跳转的Activity,若是则不创建新的;若不是则创建新的Activity。 4 singleInstance 被设置该模式的Activity会单独占一个栈, 且仅有一个。 例如:A->B->C->D->B,(B为singleInstance模式) 从B开始返回时,B->D,D->C,C->A; 原因是B和A C D不在同一个栈中,B在一个单独的栈,A C D在一个另一个栈中。