安卓使用intent切换到同级窗口和子窗口,并从子窗口中获取返回数据

全栈工程师开发手册 (作者:栾鹏)

安卓教程全解

安卓使用intent切换窗口,并从子窗口中获取返回数据

切换到应用内部同级窗口,同时传递数据

窗口 Intent_Activity 切换到应用内同级窗口 Intent_SubActivity

在Intent_Activity.java中调用下面函数,在切换中可以通过Bundle传递数据,

public void to_activity()
{
    	Intent myintent = new Intent();
    	Bundle data = new Bundle();
    	data.putString("mykey", "myvalue");  //向intent写入数据
    	myintent.putExtras(data);   //将数据模块放入切换类中
    	myintent.setClass(Intent_Activity.this,Intent_SubActivity.class);
    	startActivity(myintent);  //启动新页面
    	Log.v("窗口切换", "主窗口:"+"myvalue");
    	finish();
}

在Intent_SubActivity.java中调用下面函数,通过getIntent,getData,getExtras获取数据

    public void getdata() {
	    Intent intent = this.getIntent();   //getIntent返回最初用来创建activity的Intent
	    String action = intent.getAction();   //读取动作
	    Uri data = intent.getData();    //读取数据
    	Bundle local_data=intent.getExtras();  //读取本地intent中的数据模块
    	String myvalue=local_data.getString("mykey"); //读取数据模块中的数据值
    	Log.v("窗口切换", "同胞窗口:"+myvalue);
    	//startNextMatchingActivity(intent);  //将intent传递给下一个匹配的activity
	}

切换到应用内部子窗口,并接收子窗口关闭后的返回数据

1、窗口 Intent_Activity 切换到应用内子窗口 Intent_SubActivity

在Intent_Activity.java中调用下面函数,在切换中可以通过Bundle传递数据。

父窗口启动子窗口时,设置请求码,用来区别同一个父窗口请求的不同子窗口,或对同一个子窗口不同状况下不同类别的请求。

    private final int request_type1=1;   //一般不同的请求码使用终态int型表示。
    public void to_activity_result()
    {
    	Intent myintent = new Intent();
    	Bundle data = new Bundle();  
    	data.putString("mykey", "myvalue");  //向intent写入数据
    	myintent.putExtras(data);   //将数据模块放入切换类中
    	myintent.setClass(Intent_Activity.this,Intent_SubActivity.class);
    	startActivityForResult(myintent, request_type1);    //参数11表示请求码,可以自己传递一个int型数据,用于区别打开多个不同的子窗口
    	Log.v("窗口切换", "父窗口发送到子窗口:"+"myvalue");
    }

2、在子窗口Intent_SubActivity.java中调用下面函数,接收父窗口传来的数据,并设置返回数据。

子窗口返回到应用内部父窗口时,结果码用来区别同一个子窗口对不同父窗口的响应,或不同情况下的响应

 public void back()
    {
    	Intent intent = this.getIntent();   //getIntent返回最初用来创建activity的Intent
    	Bundle local_data=intent.getExtras();  //读取本地intent中的数据模块
    	String myvalue=local_data.getString("mykey"); //读取数据模块中的数据值
    	Log.v("窗口切换", "子窗口接收到父窗口:"+myvalue);
    	
    	Intent backintent = new Intent();
    	Bundle backdata = new Bundle();  
    	backdata.putString("mykey1", "back_value");  //向intent写入数据
    	backintent.putExtras(backdata);  //将数据模块放入切换类中
    	setResult(101,backintent);  //参数101表示结果码,自己传递一个int型数据,用于区别同一个子窗口的多种可能的返回结果
    	Log.v("窗口切换", "子窗口发送到父窗口:"+"back_value");
    	finish();
    }

3、父窗口Intent_Activity.java重写onActivityResult结果函数,收集子窗口返回的数据。

在onActivityResult通过请求码和结果码区别不同的请求下,不同的应答。

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){  //requestCode打开子窗口时的请求码,resultCode子窗口返回的响应码,data目标窗口返回的intent
    	super.onActivityResult(requestCode, resultCode, data);
    	if (requestCode==request_type1) {
    		if (resultCode==101) {
				Bundle backdata = data.getExtras();  //取得来自子窗口的数据模块
				String backstr = backdata.getString("mykey1");
				Log.v("窗口切换", "父窗口接收到子窗口:"+backstr);
			}if (resultCode==102) {
				Bundle backdata = data.getExtras();  //取得来自子窗口的数据模块
				String backstr = backdata.getString("mykey2");
				Log.v("窗口切换", "父窗口接收到子窗口:"+backstr);
			}
		}
    }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用kotlin编写的安卓代码,用于从相册选择图片并将其显示在ImageView。 首先,需要在AndroidManifest.xml文件添加以下权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 然后,在Activity的onCreate方法添加以下代码: ```kotlin val intent = Intent(Intent.ACTION_PICK) intent.type = "image/*" startActivityForResult(intent, 1) ``` 这将打开系统的相册应用程序,让用户选择一个图片。 在Activity添加以下方法,以处理用户选择的图片: ```kotlin override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 1 && resultCode == RESULT_OK && data != null) { val imageUri = data.data if (imageUri != null) { val bitmap = getBitmapFromUri(imageUri) imageView.setImageBitmap(bitmap) } } } private fun getBitmapFromUri(uri: Uri): Bitmap? { val inputStream = contentResolver.openInputStream(uri) return BitmapFactory.decodeStream(inputStream) } ``` 此代码首先检查requestCode和resultCode是否与我们启动Activity时使用的值匹配。如果匹配,则获取用户选择的图片的URI。 然后,我们调用getBitmapFromUri方法,该方法从URI获取输入流,并使用BitmapFactory将其解码为Bitmap对象。最后,我们将该位图设置到ImageView。 请注意,这种方法可能无法在Android 10正常工作,因为Android 10引入了一些更严格的文件访问权限。要在Android 10使用此方法,请确保在AndroidManifest.xml文件添加以下权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 并使用以下代码打开图库: ```kotlin val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.type = "image/*" startActivityForResult(intent, 1) ``` 这将打开系统的文档应用程序,让用户选择一个图片。在处理用户选择的图片时,您需要使用以下方法获取输入流: ```kotlin private fun getBitmapFromUri(uri: Uri): Bitmap? { val inputStream = contentResolver.openInputStream(uri) return BitmapFactory.decodeStream(inputStream) } ``` 请注意,Android 10,您需要在AndroidManifest.xml文件添加以下权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 并在应用程序运行时请求这些权限。 以上是使用kotlin编写的安卓代码,用于从相册选择图片并将其显示在ImageView,并保证在Android 10可用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯数据架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值