Android学习-四大组件(Activity)
来源:互联网 发布:jquery加载js 编辑:程序博客网 时间:2024/05/17 02:28
今天开始复习四大组件,也当做个笔记
创建一个Activity
首先在res/layout创建好布局文件activity_main.xml,然后在src中对应package中创建Activity,然后在onCreate()里面调用setContentView()导入对应的布局id,最后在AndroidManifest中配置好。
Tips:
Android四大组件都要在AndroidManifest中进行注册
使用Intent启动Activity
显式Intent
一、setClass(Context,Class)
context指的是上下文,指的来源的activity,class是指的要调用的activity.class,如
Intent intent=new Intent();intent.setClass(A.this,B.class);startActivity(intent);
当然,平时用得更多的是在新建Intent的时候直接传入参数
Intent intent=new Intent(A.this,B.class);startActivty(intent);
三、setClassName()
setClassName()有两种重载,分别是setClassName(packageContext, className)和setClassName(packageName, className)
第一种setClassName(packageContext, className)
第一个参数和上面一样,第二个是要调用的Activity的包名+activity的名字,如
intent.setClassName(A.this,"com.example.intent.B");
这种方式只能调用同一程序的其他Activity
第二种setClassName(packageName, className)
第一个参数是要调用的Activity所在的程序的程序包名,是在AndroidManifest里面设置的程序包名,而不是src中的包名,第二个参数就是src包名+Activity名字,如
intent.setClassName("com.example.activity","com.example.activity1.MainActivity");
这种方式可以调用其他程序的某个Activity
隐式Intent
不明确指出要调用的Activity的名字以及所在程序的包名等等。通过设置过滤条件,然后由系统筛选出那些程序的Activity满足过滤条件,可以直接被调用,比较常见的场景就是打开某个链接,系统弹出对话框选择有哪个程序来打开。首先要在被调用的Activity的AndroidManifest中设置好条件
<activity android:name="com.example.intent.A"> <intent-filter> <action android:name="myaction"/> <category android:name="mycategory"/> <category android:name="android.intent.category.DEFAULT">
然后在使用Intent调用的时候把筛选条件添加进去就行了
Intent intent=new Intent();intent.setAction("myaction");intent.addCategory("mycategory");startActivity(intent);
此时,如果有其他程序的某个Activity也配置了相同的action和category,那么就会让用户做出选择通过哪个程序来启动
Intent日常使用
通过Intent来传递数据
比如在Activity01中启动Activity02,并要传递一个String字符串到Activity02中,那么在Activity01新建Intent的时候可以把要传递的字符串传入Intent中
Intent intent=new Intent(A.this,B.class);intent.putExtra("data","你好");//第一个参数是键值,相当于该数据的标签startActivity(intent);
然后在Activity02中来接收
Intent intent=getIntent();String data=intent.getStringExtra("data");
也可以使用Bundle
Intent intent=new Intent(A.this,B.class);Bundle bundle=new Bundle();bundle.putString("data","你好");bundle.putInt("number",2333);intent.putExtras(bundle);startActivity(intent);
使用Bundle传入数据的时候要选择对应数据类型的方法来传入,而用Intent的时候则是直接使用putExtra()
接下来在目标Activity中接收
Intent intent=getIntent();Bundle bundle=intent.getExtras();String data=bundle.getString("data");int i=bundle.getInt("number");
使用Bundle直接get类型,后面不用加Extra
通过Intent来返回数据
从Activity02中返回数据给Activity01,比如返回一个字符串,Android有个方法叫startActivityForResult(),用来启动活动,并且接收后面返回的数据,startActivityForResult()比startActivity()多一个参数,用来表示请求码,那么把之前的代码做修改,先建一个常量来表示请求码
private static final int GET_DATA=1;......Intent intent=new Intent(A.this,B.class);startActivityForResult(intent,GET_DATA);
然后在Activity02来返回数据,设定按back键销毁Activity02的时候返回数据,重写onBackPressed()方法
@Overridepublic void onBackPressed(){ Intent intent=new Intent(); intent.putExtra("data","你好"); setResult(RESULT_OK,intent);//第一个参数表示返回是否有结果,第二个就是包含数据的Intent finish();}
Activity01中,会有onActivityResult()方法来接收数据,所以要重写它来进行数据处理
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case GET_DATA: if (resultCode == RESULT_OK) {//判断是否有结果 String data1 = data.getStringExtra("data"); } break; default: break; }}
Activity的生命周期
官方文档中的Activity生命周期图
通常在onCreate()中来配置UI等等
在onPause()里执行
- 停止动画或者是其他正在运行的操作等消耗CPU资源的行为
- 提交缓存(比如草稿)
- 释放之前的资源,比如MediaPlayer.stop()和MediaPlayer.release()
为Activity创建目录
首先在res目录下新建一个铭文menu的文件夹,里面用于存放目录的布局文件,新建main.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item //向目录里面添加子选项 android:id="@+id/add_item" android:title="@string/add_item"/> <item android:id="@+id/remove_item" android:title="@string/remove_item"/> <item android:id="@+id/logout_item" android:title="@string/logout_item"/></menu>
然后在MainActivity里面加载
public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub getMenuInflater().inflate(R.menu.main, menu);//第二个参数表示要往哪一个Menu对象上加载布局,这里就写传入进来的menu return true;//menu可显示 }
调用getMenuInflater()方法得到MenuInflater对象,再调用MenuInflater对象的inflate()方法来加载配置好的布局。然后再调用onOptionsItemSelected()方法来为每一个item设置点击事件
@Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.add_item: Toast.makeText(this, "你点击了添加", Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(this, "你点击了删除", Toast.LENGTH_SHORT).show(); break; case R.id.logout_item: Toast.makeText(this, "你点击了注销", Toast.LENGTH_SHORT).show(); break; default: break; } return true; }
这样就可以在ActionBar上使用目录了。
- Android学习-四大组件(Activity)
- 【android学习】四大组件-Activity
- 【android学习】四大组件-Activity
- Android学习----四大基本组件之一Activity(1)
- android学习笔记(一)四大组件activity详解
- android学习笔记(一)四大组件activity详解
- Android学习笔记--四大组件之Activity
- Android 四大组件学习之Activity生命周期
- Android四大组件学习(一)---Activity
- Android四大组件学习之Activity
- Android 四大组件学习之Activity一
- Android 四大组件学习之Activity二
- Android 四大组件学习之Activity三
- Android 四大组件学习之Activity四
- Android 四大组件学习之Activity五
- Android 四大组件学习之Activity七
- Android 四大组件学习之Activity六
- Android四大组件学习——Activity
- Unicode
- android LurCache类分析
- 开源ZQLoopScrollView轮播组件
- POJ 2549 Sumsets(折半枚举)
- 利用c语言编辑--钟表模拟程序(表针形式)
- Android学习-四大组件(Activity)
- 如何创建一个控制器
- pureLayout的九宫格布局
- 进程间通讯,通过自定义的URL Scheme启动你的App
- hdu3966 点权模板-树链部分
- 蓝桥杯 历届试题 小朋友排队
- 线程的相关知识
- IOS URLConnect 分段下载,暂停/重新下载
- Oracle查询转换