android基础(四)
来源:互联网 发布:跑跑卡丁车淘宝买号 编辑:程序博客网 时间:2024/06/01 10:48
Intent
Intent是Android程序中各组件之间进行交互的一种重要方式
- 指明当前组件想要执行的动作
- 在不同组件中传递数据
Intent一般可用于启动活动,启动服务,发送广播等场景
学习如何使用之前,先建好两个活动(这里在上一个程序的基础上再建一个活动即可)
使用显式intent
重写第一个活动中按钮的点击事件
button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent(login.this, SecondActivity.class); startActivity(intent); } });
构建一个Intent,传入login.this作为上下文,传入SecondActivity.class作为目标活动
在login活动的基础上打开SecondActivity这个活动,然后通过startActivity()方法执行这个Intent
使用隐式intent
使用隐式Intent需要对第二个Activity进行配置
在<activity>
标签下配置<intent-filter>
的内容,可以指定当前活动能够响应的action和category
</activity> <activity android:name="second.SecondActivity"> <intent-filter> <action android:name="com.example.administrator.logintest.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
在<action>
标签中我们指明了当前活动可以响应com.example.administrator.logintest.ACTION_START这个action,而<category>
标签包含了一些附加信息,更精确地指明了当前的活动能够响应Intent中 可能带有的category,只有<action>
和<category>
内容同时匹配才能响应Intent
修改login中的点击事件
public void onClick(View v){ Intent intent = new Intent("com.example.administrator.logintest.ACTION_START"); startActivity(intent); }
使用Intent的另一个构造函数,直接将action的字符串传进来,能响应com.example.administrator.logintest.ACTION_START
这个action活动
这里没有category没有指定因为android.intent.category.DEFAULT
是默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中.
也可以用 <category android:name="com.example.administrator.logintest.MY_CATEGORY"/>
Intent.addCategory("com.example.administrator.logintest.MY_CATEGORY");
这两句话添加到响应的地方
向下一个活动传递数据
public void onClick(View v){ String data ="Hello SecondActivity"; Intent intent = new Intent(login.this,SecondActivity.class); intent.putExtra("extra_data",data); startActivity(intent); }
修改第一个活动中的点击事件
在这里使用显式Intent方式启动SecondActivity,
putExtra()接受两个参数,第一个是键,用于从后面Intent取值,第二个是要传递的数据
public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_second); Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); Log.d("SecondActivity",data); }}
getIntent()启动SecondActivity的Intent
getStringExtra()传入相应键值//因为是String类型所以是getStringExtra()
在logcat中可以看到Hello SecondActivity的字样
返回数据给上一个活动
在这里使用一个startActivityForResult()方法,这个方法期望在活动销毁时能返回一个结果给上一个活动
button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent(login.this,SecondActivity.class); startActivityForResult(intent,1); } });
这里请求码只要是个唯一值就行
然后修改活动二的点击时间
button2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent =new Intent(); intent.putExtra("data_return","Hello FirstActivity"); setResult(RESULT_OK,intent); finish(); } });
在这儿构建了一个Intent,这个Intent仅仅用来传递数据
调用setResult()方法,专门用于向上一个活动返回数据
setResult()接收两个参数
- 第一个用来向上个活动返回处理结果,一般只用RESULT_OK或RESULT_CANCELED这两个值
- 第二个参数是把带有数据的Intent传递回去
然后调用finish()方法来销毁当前活动
重写第一个活动中的onActivityResult()
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ switch (requestCode){ case 1: if(resultCode==RESULT_OK){ String returnedData= data.getStringExtra("data_return"); Log.d("FirstActivity",returnedData); } break; default: } }
这里onActivityResult()有三个参数
- 第一个参数requestCode 启动活动时传入请求码
- 第二个参数resultCode 返回数据的 时候传入的处理结果
- 第三个参数data 携带着返回数据的Intent
另外按下back键返回实现这个效果可以重写onBackPressed()方法
@Override public void onBackPressed(){ Intent intent = new Intent(); intent.putExtra("data_return","Hello FirstActivity"); setResult(RESULT_OK,intent); finish(); }
- Android核心基础(四)
- Android核心基础四
- android基础(四)
- android基础(四)
- Android基础(四) 常用控件
- Android基础综合案例(四)
- 0基础自学Android(四)
- Android Studio四--Gradle基础
- <Android 基础(四)> RecyclerView
- Android基础:ListView + ViewPager ( 四 )
- Android 基础复习(四)
- Android基础(四) 常用控件 - ProgressBar
- Android近场通信---NFC基础(四)
- Android基础总结之四:AndroidManifest.xml
- Android基础--Activity的四种launchMode
- Android近场通信---NFC基础(四)
- Android近场通信---NFC基础(四)
- Android Studio系列教程四--Gradle基础
- 汤晓鸥:百度并没有“作弊” 吴韧工作令人钦佩
- 联想G40 U盘装系统问题解决
- 使用两个栈实现一个队列
- lintcode balanced-binary-tree 平衡二叉树
- Maven+SpringMVC3+MyBatis+FreeMarker
- android基础(四)
- Java自然排序(个人总结-求赞)
- Eclipse 安装 activiti 插件 失败 An error occurred while collecting items to be installed
- mongoDB学习笔记 索引
- 微信内嵌浏览器sessionid丢失问题
- iOS开发零基础教程之证书、描述文件、App ID的解释
- OpenCV2.4.13+VS2012开发环境配置
- JavaScriptCore框架介绍
- android:layout_gravity和android:gravity的区别