最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android基础之startActivityForResult()的用法详解
时间:2017-02-27 编辑:简简单单 来源:一聚教程网
安卓开发中一个很基础的操作就是打开一个 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 {
privateEditText editText; privateButton button; publicstaticintREQUEST_CODE =1;
@Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
LinearLayout layout =newLinearLayout(this); editText =newEditText(this); button =newButton(this); button.setText("Main"); button.setOnClickListener(this);
layout.addView(editText); layout.addView(button); setContentView(layout); }
@Override publicvoidonClick(View v) { Intent intent =newIntent(this, OtherActivity.class); intent.putExtra("text", editText.getText().toString()); startActivityForResult(intent, REQUEST_CODE); }
@Override protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) { 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 {
privateEditText editText; privateButton button; publicstaticintRESULT_CODE =1;
@Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
LinearLayout layout =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(View v) { Intent intent =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 中也会跟着改变。