Android学习笔记——Activity之显式启动第二个Activity
来源:互联网 发布:墨子号成功发射 知乎 编辑:程序博客网 时间:2024/06/12 01:36
在使用Android应用程序过程中,我们经常会从一个“页面”转跳到另一个“页面”,这其中有些就是使用Activity的转跳来实现。而我们学习Android的过程中,启动另一个Activity也算是比较基础的内容。启动的方式有显式启动和隐式启动,其中显式启动的方法比较简单,本次就来讲讲显式启动另一个Activity的方法。
首先在res>layout>activity_main中,编辑如下的代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/start_second_activity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动第二个Activity"/> <Button android:id="@+id/send_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送数据给第二个Activity"/></LinearLayout>
在如上的代码中,我们使用了LinearLayout来当父View,其中的orientation属性为"vertical",即子组件的排列方式是竖直方向。gravity属性为"center",即子组件将会是居中排布。然后从上到下依次是一个EditText和两个Button,可以将EditText的数据传给第二个Activity。第一个Activity界面如下:
对于一个界面的按钮,我们使用了两种方法来设置点击监听,Java代码如下:
mStartButton = (Button) findViewById(R.id.start_second_activity); mSendButton = (Button) findViewById(R.id.send_text);
mStartButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } });
第一个按钮,这个是启动另一个Activity的简单代码,只需要创建一个Intent实例,这里我们用到了Intent(Context packageContext, Class<?> cls)这个构造方法,第一个参数是目前所在的MainActivity,要注意这里的“MainActivity.”不能省略,应为这里是在一个匿名内部类中,如果省略了“MainActivity.”,那么“this”就会表示成当前的内部类。接着我们通过调用startActivity(Intent intent)方法来启动另一个Activity。这种方法应该算是最简单的显式启动一个Activity(如果读者有其他更简单的方法,也可在评论告知,谢谢)但是并不能携带任何信息给启动的Activity。
mSendButton.setOnClickListener(this); @Override public void onClick(View v) { Intent message = new Intent(this, SecondActivity.class); message.putExtra(EXTRA_MESSAGE, mEditText.getText().toString()); startActivityForResult(message, REQUEST_CODE); }
第二个按钮,设置监听的参数使用了“this”,然后使MainActivity去实现View.OnClickListener这个接口,再重写onClick方法即可。在第二个按钮的点击事件中,我们使用Intent的putExtra(...)方法,将上面的EditText中的文本信息加入到message中。此处放进去的相当于是一个键值对,在第二个Activity中取出文本内容也是通过此处的键去取到值。要注意的点是此处调用的方法是startActivityForResult(intent,requestCode),使用此方法还可以接收要启动的Activity回传的数据。即可以实现两个Activity的通信。第一个参数是携带了文本信息的intent,第二个参数是一个请求码,设置好请求码可以实现第二个Activity回传数据给第一个Activity。相信仔细思考的你可能会有疑问?传输的信息主要是附加在intent上的,那么我通过intent.putExtra(...),附加了信息,然后调用startActivity(intent)方法,不是也可以传输数据过去吗?答案是确定的,笔者认为可以这样来区分,startActivity方法只能实现单方面的数据传输,即从第一个Activity传数据到第二个Activity。而startActivityForResult方法则可以真正实现双方的数据传输。
在第二个Activity中如何接收到第一个传过来的数据呢?代码如下:
getIntent().getStringExtra(MainActivity.EXTRA_MESSAGE)
通过getIntent()方法得到传送过来的intent(我们的数据就附加在intent上),再通过getXXXExtra(...)方法,参数就是之前键值对的key。这样就可以取出第一个Activity传输到第二个Activity的内容了。如何实现数据的回传呢?在第二个Activity中,我们通过调用setResult(resultCode,intent)来返回数据。其中的resultCode,一般是
RESULT_OK,RESULT_CANCEL这两个常用的。这里我是通过Button的点击时间来实现回传,代码如下:
mButton.setOnClickListener(new MyOnClickListener()); private class MyOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra(EXTRA_CHECKED, mCheckBox.isChecked()); setResult(RESULT_OK, intent); finish(); } }
回传的信息同样是附加在intent中。(intent在Android中常做信息传输的载体)在第一个Activity中,覆写onActivityResult()方法来处理。代码如下:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == REQUEST_CODE) { Boolean check = data.getBooleanExtra(SecondActivity.EXTRA_CHECKED, false); Toast.makeText(this, "SecondActivity:" + check, Toast.LENGTH_SHORT).show(); } } }
首先通过回传是否OK来决定是否处理,再根据请求码来区分是哪一个Activity回传的数据(一个Activity可以通过设置不同的请求码来实现启动多个Activity,那么在回传数据的时候,就要判断是哪个Activity回传的数据)。这里和前面的intent取数据就是一样的了。取出数据之后,可以做相应的处理。笔者也是学Android的新手,也是刚刚开始写blog,如果有什么写的不对的地方,欢迎各位指正。如果有什么问题的,也欢迎在评论区讨论,谢谢。下一篇打算讲讲Activity的隐式启动。
关于这个启动,可以看google的官方的介绍,同样是显式启动:https://developer.android.com/training/basics/firstapp/starting-activity.html
- Android学习笔记——Activity之显式启动第二个Activity
- andriod学习——启动第二个activity
- 启动第二个Activity
- 《android编程权威指南》学习笔记之第五章 第二个Activity
- Android编程权威指南(第二版)学习笔记(五)—— 第5章 第二个 Activity
- Android学习笔记——Activity的启动和创建
- Android学习笔记——Activity的启动和创建
- Android学习笔记——Activity的启动和创建
- 由一个activity启动第二个activity
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- 学习笔记—Activity的启动模式
- JavaScript基础 计时事件
- Skip the Class hdu AB
- HDU2819-Swap
- Spring异常——jar包冲突
- Linux下如何调试coredump文件
- Android学习笔记——Activity之显式启动第二个Activity
- Java面试必看二十问题(一)
- Xcode中写C程序的问题
- GIS讲堂第三课-PostGIS空间函数简介
- tensorFlow
- system alert dialog example
- hdu 6011Lotus and Characters
- 3192: [JLOI2013]删除物品
- 工具篇之优雅地使用Sublime Text3