Android基础之startActivityForResult()的用法详解
前言
安卓开发中一个很基础的操作就是打开一个Activity,另一个很必要的操作就是,打开一个Activity,在打开的Activity中操作之后并获得返回结果。
两个Activity
为了演示这个操作,我们需要两个Activity:MainActivity和OtherActivity,在MainActivity中通过Intent启动OtherActivity,并获得OtherActivity结束后返回的结果,例子仅作演示,为了方便,我直接在Java文件中定义了控件,就不写布局文件了。
MainActivity.java
packagenet.conw.intenttest;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.LinearLayout;
publicclassMainActivityextendsActivityimplementsView.OnClickListener{
privateEditTexteditText;
privateButtonbutton;
publicstaticintREQUEST_CODE=1;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
LinearLayoutlayout=newLinearLayout(this);
editText=newEditText(this);
button=newButton(this);
button.setText("Main");
button.setOnClickListener(this);
layout.addView(editText);
layout.addView(button);
setContentView(layout);
}
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(this,OtherActivity.class);
intent.putExtra("text",editText.getText().toString());
startActivityForResult(intent,REQUEST_CODE);
}
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==REQUEST_CODE&&resultCode==OtherActivity.RESULT_CODE){
editText.setText(data.getStringExtra("text"));
}
}
}
OtherActivity.java
packagenet.conw.intenttest;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.LinearLayout;
publicclassOtherActivityextendsActivityimplementsView.OnClickListener{
privateEditTexteditText;
privateButtonbutton;
publicstaticintRESULT_CODE=1;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
LinearLayoutlayout=newLinearLayout(this);
editText=newEditText(this);
button=newButton(this);
button.setText("Other");
button.setOnClickListener(this);
layout.addView(editText);
layout.addView(button);
setContentView(layout);
editText.setText(getIntent().getStringExtra("text"));
}
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent();
intent.putExtra("text",editText.getText().toString());
setResult(RESULT_CODE,intent);
finish();
}
}
整个代码的执行逻辑如下:
1、两个Activity的代码就是这样的,当MainActivity中的Button被触发onClick()事件后,把MainActivity中的EditText的内容发给了OtherActivity。
2、OtherActivity打开并初始化好控件后,把EditText的内容设置为MainActivity发过来的内容。
3、当OtherActivity中的Button被触发onClick()事件后,把OtherActivity中的EditText的内容返回给MainActivity。
4、当返回到MainActivity时,会执行ononActivityResult()方法的内容,判断如果RequestCode和ResultCode无误后,把MainActivity中的EditText的内容改为OtherActivity返回的结果。(这里判断了RequestCode和ResultCode,所以OtherActivity通过Back键返回时,MainActivity的内容不会改变)
所以结果就是,通过这样的方式打开这两个Activity,他们中的EditText的内容是同步的,一个Activity改变了,到另一个Activity中也会跟着改变。
总结
好了,以上就是关于Android中startActivityForResult()的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对毛票票的支持。
