很多时候,我们将A中的数据,交由B处理!B处理完了之后,会将结果反馈A。
我们将A中的数据,交由B处理的过程叫做:传值
将B处理完了之后,会将结果反馈A叫做:回传值
在Android中的Activity有时候也需要这样的过程!
Activity有一个重要的方法:onActivityResult();
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
}
参数说明:
requestCode:请求码
resultCode:结果码
data:返回数据
下面我们来举个例子:
首先父亲问儿子:期末你考了多少分?
儿子对父亲说:我考了100分!
这个过程!
父亲将这个问题说出来,儿子接受到这个问题并对这个问题进行相应的处理之后,把结果反馈给父亲!
下面我们通过程序来实现这样的一个过程
1.项目结构图
注意要在AndroidManifest.xml去注册相应的Activity
2.
首先在ParentActivity我们需要将我们的数据包装一下然后发给ChildrenActivity
//获取问题
String question = mEtQuestion.getText().toString().trim();
//包装数据
Bundle bundle = new Bundle();
bundle.putString("question", question);
Intent intent = new Intent(ParentActivity.this, ChildrenActivity.class);
intent.putExtras(bundle);
//提出问题给儿子,并记下请求码。可能儿子不了一个
startActivityForResult(intent, 001);
//显示父亲的问题
Intent intent = getIntent();
String question = intent.getStringExtra("question");
mTvShowQuestion.setText(question);
反馈答案给父亲
//回答父亲的问题
String myresult = mEtMyAnswer.getText().toString().trim();
Intent intent = new Intent();
intent.putExtra("myresuly", myresult);
//记录下要返回给那个父亲,可能还有什么继父什么的
setResult(002, intent);
finish();
之后父亲得到儿子的答案,这时候要判断是否是我问那个儿子的编号,然后对于儿子来说,我的编码。是否一致
if (requestCode == 001 && resultCode == 002)
{
mTvChildrenResult.setText("儿子说:"+data.getStringExtra("myresuly"));
}
下面是完整代码:
ParentActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ParentActivity extends Activity
{
private Button mBtnAsk;
private TextView mTvChildrenResult;
private EditText mEtQuestion;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_parent);
initView();
// 设置监听事件
mBtnAsk.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
//获取问题
String question = mEtQuestion.getText().toString().trim();
//包装数据
Bundle bundle = new Bundle();
bundle.putString("question", question);
Intent intent = new Intent(ParentActivity.this, ChildrenActivity.class);
intent.putExtras(bundle);
//提出问题给儿子,并记下请求码。可能儿子不了一个
startActivityForResult(intent, 001);
}
});
}
/**
* 初始化控件
*/
private void initView()
{
mBtnAsk = (Button) findViewById(R.id.btn_ask);
mTvChildrenResult = (TextView) findViewById(R.id.tv_childrenresult);
mEtQuestion = (EditText) findViewById(R.id.et_question);
}
/**
*
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 001 && resultCode == 002)
{
mTvChildrenResult.setText("儿子说:"+data.getStringExtra("myresuly"));
}
}
}
ChildrenActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ChildrenActivity extends Activity
{
private TextView mTvShowQuestion;
private Button mBtnAnswer;
private EditText mEtMyAnswer;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_children);
initView();
//显示父亲的问题
Intent intent = getIntent();
String question = intent.getStringExtra("question");
mTvShowQuestion.setText(question);
mBtnAnswer.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//回答父亲的问题
String myresult = mEtMyAnswer.getText().toString().trim();
Intent intent = new Intent();
intent.putExtra("myresuly", myresult);
//记录下要返回给那个父亲,可能还有什么继父什么的
setResult(002, intent);
finish();
}
});
}
/***
* 初始化控件
*/
private void initView()
{
mTvShowQuestion = (TextView) findViewById(R.id.tv_showquestion);
mBtnAnswer = (Button) findViewById(R.id.btn_answer);
mEtMyAnswer = (EditText) findViewById(R.id.et_myanswer);
}
}
布局文件:
activity_parent.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<EditText
android:id="@+id/et_question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="问题..." />
<Button
android:id="@+id/btn_ask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="问儿子" />
<TextView
android:id="@+id/tv_childrenresult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="26sp"
android:textColor="#06f"
/>
</LinearLayout>
activity_children.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp" >
<TextView
android:id="@+id/tv_showquestion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="26sp" />
<EditText
android:id="@+id/et_myanswer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="答案" />
<Button
android:id="@+id/btn_answer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="给爸爸说"
android:textSize="16sp" />
</LinearLayout>
效果图: