Android中Activity之间的数据传递和Intent使用
16lz
2021-01-23
Android中Activity之间的数据传递和Intent使用
首先介绍一下Activity:Activity是Android的四大组件之一,Activity参与的工作大多和操作界面有关。
在我的下一篇文章会重点介绍关于Activity生命周期的内容,这篇文章先不管这个部分。
关于Activity启动的方式:
- 一个程序通常会包含多个Activity,但是只有一个Activity会作为程序的主入口,就是第一个启动的Activity。
- 如果当前的Activity不是程序第一个启动的Activity那么这个Activity的启动方式就只能是由其他的Activity来启动
- startActivity(Intent intent) :当前的Activity调用这个方法,直接启动其他的Activity
- startActivityForResult(Intent intent, int requestCode):用请求码来启动新Activity,而且原来的Activity将会在新Activity中获取到数据返回。
关于Android关闭的方法:
- finish():结束当前的Activity
- finishActivity(int requestCode):结束用startActivityForResult方法启动的Activity
使用Bundle在Activity之间交换数据:
我们在上面看到Activity之前的跳转一直会有用到一个参数intent,这东西其实就是一个信使,Activity之间数据交换的媒介,我们主要将数据放入intent即可。
Android为intent提供了很多put和get方法来进行数据的存取,但是有一个非常便利的东西叫做Bundle
,它是intent里面的一个简单的数据包,如果直接使用intent来存取数据会显得很乱,所以我们通常让bundle来帮我们打包数据,intent也主要用bundle来携带数据。
注意:在没有创建Bundle对象时,如果向Intent存入数据,Intent会自行创建一个Bundle对象,再向Bundle存入数据
之前在做项目的时候在登录界面就是通过Bundle对象来存储登录信息,在完成登录后结束当前的Activity,并且通过Intent将结果返回到新的Activity中去
下面通过一个实例来介绍一下上面所讲的内容: 首先是一个xml布局文件
<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
对应的MainActivity爪哇文件
import android.content.Intent;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.content.Intent;import android.util.Log;import android.view.View;import android.app.Activity;import android.widget.Button;import android.widget.Toast;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity { private Button bt1; private Button bt2; private String getresult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first); bt1 = (Button) findViewById(R.id.button_first1); bt2 = (Button) findViewById(R.id.button_first2); bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(MainActivity.this,second.class); startActivity(intent); } }); bt2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ Intent intent= new Intent(MainActivity.this,second.class); //这里启动startActivityForResultl方法,1是请求码 startActivityForResult(intent,1); } }); } /* 通过startActivityForResultl来实现跳转 后面的Code 1是 要求码 requestCode onActivityResult来接受返回结果以及做出处理 resultCode 是返回码 同过返回码和要求码来鉴别哪个页面的返回 接受返回数据的是 Intent的对象 data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == 2) { Log.d("TAG", "aaaaa"); //这里引号中的data是key 钥匙的作用 对应于数据 Bundle data2 = getIntent().getExtras(); getresult = data.getStringExtra("data"); } }}
可以看到,在MainActivity中定义了两个按钮,一个带返回值,另一个不带返回值,通过对比就可以看出两者的不同,两个按钮都是跳转到同一个界面
第二个布局:
<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> "match_parent" android:layout_height="wrap_content" android:text="第二个界面" android:id="@+id/button_second1" android:layout_gravity="center_horizontal" /> "match_parent" android:layout_height="wrap_content" android:text="附带返回值的返回按钮" android:id="@+id/button_second2" />
以及第二个界面的代码:
import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import java.util.Timer;import java.util.TimerTask;/** * Created by Administrator on 2016/7/31 0031. */public class second extends AppCompatActivity { private Button bt2; private String returndata = "返回数据流 来second"; @Override public void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.second); bt2 = (Button) findViewById(R.id.button_second2); bt2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent data = getIntent(); data.putExtra("data", returndata); //通过setResult 来设置返回结果 2是返回码,data是Intent对面 也是数据流 setResult(2, data); Log.d("TAG", "第二个界面结束了"); //结束这个页面 finish(); } });
更多相关文章
- Android Map Api 使用和开发(1) 添加地图和界面
- 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内
- 【Android 开发】: Android客户端与服务端之间使用GSON交互数据
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
- Android遍历SqlLite cursor对象:
- Android 反射获得控件对象
- Android实现界面跳转