Activity 带回调启动与带结果返回
1.先理解一下相关的知识 Intent意图
- Intent(Context packageContext,,Class cla)用于创建显示意图对象
- Intent(String action):用于创建隐式意图对象
- putExtra(String name ,Xxx value):保存额外数据
- XxxData(Uri data):设置特定格式的URL数据
5.
Activity:活动
1.startActivity(Intent intent):一般启动Activity
2.startActivityForResult(int reqCode,Intent intent):带回调启动activity
3.onActivityResult(int reCode,int resultCode,Intent data):回调方法
4.setResult(int resultCode,Intent data):设置要返回的结果
5.finish():结束当前activity
6.getIntent():得到启动Activity的意图
下面来实现一个小例子:
他的功能很简单:大概就是在第一个界面输入的内容传到第二个界面,在第二界面改变内容,又传回到第一个界面。
MainActivity类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText= (EditText) findViewById(R.id.editText);
bnt1= (Button) findViewById(R.id.next_activity);
btn2= (Button) findViewById(R.id.back);
bnt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//1创建Intent对象(显示)
Intent intent=new Intent(MainActivity.this,SecondcActivity.class);
//2通过Iintent携带额外数据
//所以我们来获取输入框输入的内容 editText他的返回值类型是string
String message=editText.getText().toString();
intent.putExtra("MESSAGE",message);//(name.value)键值对 name是标识。随便定义,这里点定义为MESSAGE,它是从哪里来呢,就是我们前面的输入框
startActivity(intent);
}
});
//带回调启动的按钮
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建Intent 对象
Intent intent=new Intent(MainActivity.this,SecondcActivity.class);
//2通过intent携带额外数据
String message1=editText.getText().toString();
intent.putExtra("MESSAGE1",message1);
//3带回调启动activity 第二个参数需要一个请求码,这里随便定义一个请求码
int requestCode=1;
startActivityForResult(intent,requestCode);
}
});
}
//一般方法是调用,回调方法重写,所以我们就在这里重写这个回调方法,写好之后先不理他,我们切换到另一个activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);他里面没有代码,可以不用
//三个参数:int requestCode, int resultCode, Intent data:分别表示结果请求码,结果码 ,data就是我们刚刚在另一个activity保存的data
/**
* 1判断code 2 从data 中取出数据 3显示
*/
if (requestCode==1 && resultCode==2){
String result=data.getStringExtra("RESULT");
editText.setText(result);
}
}
}
SecondcActivity类
package androi.industryplat.com.activitytest;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class SecondcActivity extends AppCompatActivity {
private EditText ed2;
private Button btn_Callback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secondc);
ed2= (EditText) findViewById(R.id.et);
btn_Callback= (Button) findViewById(R.id.btn_Callback);
Intent intent= getIntent();//得到Intent对象
String message=intent.getStringExtra("MESSAGE1");//根据key来取value ,他返回的就是一个message
//然后把放入输入框,既然是要放入输入框,那么我们肯定要拿到输入框才行是吧
ed2.setText(message);//给ed2设置值 就可以把第一个activity输入框输入的设置给SecondcActivity的输入框啦,并显示出来
btn_Callback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//返回结果之前先保存一个结果
int resultCode=2;
//准备一个带额外数据的intent对象
Intent data=new Intent();
//结果是从输入框中获取的
String result=ed2.getText().toString();
data.putExtra("RESULT",result);//key value
//设置结果 data 通过RESULT 取得结果
setResult(resultCode,data);
finish();
}
});
}
}