Android 三个页面之间跳转,并且保存数据

Android 三个页面之间跳转,并且保存数据,第1张

第二个页面启动第三个页面的时候用startActivityForResult()方法,如果不明白怎么用,你先百度一下。

第二个页面要实现onActivityResult()方法,第三个页面结束时要设置setResult来结束。

这样做既能接收第三个页面的值,第二个页面也还是原来的那一个,所以数据还在。

现有MainActivity,当它进入到SecondActivity后,在SecondActivity中进行了某些 *** 作然后需要将值返回给MainActivity时,

于是就可以用到onActivityResult() 这个方法了,下面呢,我就具体来介绍一下用法。

不过在这之前,先讲一下intent的用法:

对于intent主要的分类主要包括隐式意图和显式意图。显式意图通常主要是启动本应用中的Activity之间的数据,

而隐式意图则常见于启动系统中的某些特定的动作,比如打电话,或者是跨应用的Activity启动。

一般来说:

显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。

隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、

数据(URI和数据类型)找到最合适的组件来处理这个意图。

1、MainActivity里面的主要代码

(1)当需要返回值时,那么在启动另一个Activity时要用到startActivityForResult(intent, REQUEST_CODE)

注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,

由此来判断是启动的某个Activity。

(2)onActivityResult()方法中的第二个参数就是SecondActivity传回来的键,

第三个参数就是SecondActivity传回来的键对应的值。

final int RESULT_CODE=101

final int REQUEST_CODE=1

public void enterSecond(View view) {

Intent intent=new Intent(this,SecondActivity.class)

startActivityForResult(intent, REQUEST_CODE)

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

Log.i(TAG, "onActivityResult"+"requestCode"+requestCode+"\n resultCode="+resultCode)

if(requestCode==REQUEST_CODE) {

if(resultCode==RESULT_CODE) {

String result=data.getStringExtra("second")

textView.setText(result)

}

}

super.onActivityResult(requestCode, resultCode, data)

}

2、SecondActivity 类中的代码:

这个里面的RESULT_CODE、intent分别跟上段代码中onActivityResult()方法中的第二个、第三个参数相对应。

final int RESULT_CODE=101

public void closeButton(View view) {

Intent intent=new Intent()

intent.putExtra("second", "I am second!")

setResult(RESULT_CODE, intent)

finish()

}

3、除此之外,onActivityResult()方法中的第二个参数resultCode还有系统自带的一些参数,也就是说,如果我们启动的intent是隐式意图,那么可以用Activity类中RESULT_OK来表示 *** 作已经顺利结束。

例如,调用系统图库的返回,请看代码:

final int CROP_PIC_REQUESTCODE = 23

final int SELECT_PICTURE = 21

if (resultCode == RESULT_OK &&requestCode == SELECT_PICTURE) {

System.out.println("调用图库返回,关闭activity")

Intent intent1 = new Intent("com.android.camera.action.CROP")

intent1.setDataAndType(data.getData(), "image/*")

intent1.putExtra("crop", "true")

intent1.putExtra("aspectX", 1)

intent1.putExtra("aspectY", 1)

intent1.putExtra("outputX", 80)

intent1.putExtra("outputY", 80)

intent1.putExtra("return-data", true)

startActivityForResult(intent1, CROP_PIC_REQUESTCODE)

}

当然,我们还可以看下源码中还有哪些类似RESULT_OK的。

/** Standard activity result: operation canceled. */

public static final int RESULT_CANCELED = 0

/** Standard activity result: operation succeeded. */

public static final int RESULT_OK = -1

/** Start of user-defined activity results. */

public static final int RESULT_FIRST_USER = 1

总结:本来我只是想使用一下显示intent启动Activity的方式,后来我又自己扩展了隐式intent启动Activity。

总之,碰到问题,要多思考,不要拘泥在一个点上,这样自己才会真正的进步。

如果大家有什么更好的建议和看法,一定要提出来,互相切磋,共同进步是我们技术宅最大的愿望啊,很高兴和大家分享!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9543538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存