Activity 带回调启动与带结果返回

来源:互联网 发布:知乎似乎出了点问题 编辑:程序博客网 时间:2024/05/17 02:39

Activity 带回调启动与带结果返回


1.先理解一下相关的知识 Intent意图

  1. Intent(Context packageContext,,Class cla)用于创建显示意图对象
  2. Intent(String action):用于创建隐式意图对象
  3. putExtra(String name ,Xxx value):保存额外数据
  4. 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类

   @Overrideprotected 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@Overrideprotected 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;

@Overrideprotected 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();        }    });}

}

0 0