您的位置:首页 > 其它

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

2017-10-24 21:01 633 查看
全栈工程师开发手册 (作者:栾鹏)

安卓教程全解

安卓使用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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐