zoukankan      html  css  js  c++  java
  • android:startActivityForResult方法的Activity跳转

    1、不带数据的activityt跳转可以通过如下代码跳转,两个activity之间没有数据传递;

    Intent intent = new Intent(this ,跳转的activity.class)
    staintentrtActivity(intent)

      而在应用中还需要用到将一个activity的数据返回给另一个activity进行处理,本节介绍其中一种携带数据跳转的activity方法。

      先有个概念,携带数据跳转的activity可以分为三个步骤:

        1 首先在Activity1中调用方法startActivityForResult(),然后这时activity就跳转到了Activity2;

        2 然后在Activity2中将处理完的数据放入bundle中,绑定到intent上,

           调用方法setResult()把数据传递给Activity1,调用finish()方法将当前activity关闭;

        3 最后在Activity1中添加一个onResultActivity(),用来处理setResult()传递过来的bundle数据。

          以上步骤没有为什么,格式就是这样子,套用就行了。

    2、以下我们上代码,具体分析见注释。代码的功能是在EditActivity中输入内容,然后按下button跳转回MainActivity之后,将内容显示在方框中;

      2.1、两个activity的页面如下:

        

      2.2、MainActivity的代码

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private TextView tv_message;
        private Button btn_jump;
        public static final int REQ_CODE_COMM_SET = 1;
        /*request code:正整型数值就行,为了便于理解,取个名字*/
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv_message= (TextView) this.findViewById(R.id.tv_message);
            tv_message.setOnClickListener(this);
            btn_jump= (Button) this.findViewById(R.id.btn_jump);
            btn_jump.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            if(btn_jump.equals(view)){
                Intent intent =new Intent(this,EditActivity.class);
                startActivityForResult(intent,REQ_CODE_COMM_SET);
                /*startActivity跳转到另一个activity,返回的时候不会携带数据
                *startActivityForResult跳转到另一个activity,返回的时候可以带数据返回至当前activty,
                * 返回携带的数据在onActivityResult中接收处理,以上步骤是定义,没有为什么*/
            }
        }
    
        protected void onActivityResult(int requestCode, int resultCode, Intent intent){
            if (requestCode == REQ_CODE_COMM_SET) {
                if (resultCode == RESULT_OK) {
                    Bundle bundle = intent.getExtras();
                    String message = bundle.getString("message");
                    tv_message.setText(message);
                    Log.d("intent with bundle", " setting succ");
                }
                else if (resultCode == RESULT_CANCELED) {  }
            }
        }
    }
    /* A Activity携带数据返回至B Activity时,则会自动调用B Activity的onAcvitityResult方法来处理数据;
    *   1、参数requestCode:
    *       正整数;如果有多个activity跳转返回至当前activity,request code可以区分出来,方便处理不同的数据
    *   2、参数resultCode:
    *       只有两个值,RESULT_OK、RESULT_CANCEL;表示activity是否跳转成功;要是被中断,值为RESULT_CANCEL
    *   3、参数intent:
    *       就是前一个页面携带数据的intent
    * */

      Bundle bundle = intent.getExtras();  String message = bundle.getString("message"); 可以合并为String message = intent.getExtras().getString(""message);

      2.3、EditActivity的代码:

    public class EditActivity extends AppCompatActivity implements View.OnClickListener {
        private EditText et_enter ;
        private Button btn_back ;
        String message ;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_edit);
            et_enter = (EditText) findViewById(R.id.et_enter);
            et_enter.setOnClickListener(this);
            btn_back = (Button) findViewById(R.id.btn_back);
            btn_back.setOnClickListener(this);
        }
        @Override
        public void onClick(View view) {
            if(btn_back.equals(view)){
                message= et_enter.getText().toString();
    
                Bundle bundle =new Bundle();
                bundle.putString("message",message);
    
                Intent intent = new Intent(this,MainActivity.class);
                intent.putExtras(bundle);
    
                setResult(RESULT_OK, intent);
                finish();
            }
        }
    }
            /*将数据放入bundle中,然后将bundle绑定到intent上,
             *然后将intent放入setResult()方法中,intent就传给了onActivityResult()*/

     代码GitHub地址:https://github.com/caesura-k/jump_activity.git

  • 相关阅读:
    远程桌面下启动MATLAB时的License Manager Error -103错误
    自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】
    XeLaTeX中文模板
    MySQL Connector 卸载
    Anaconda更新源
    命令行远程重启服务器
    gnuplot画图中文标注相关问题
    CentOS 远程桌面相关服务安装笔记
    Windows下python2.7安装64位mysqlclient
    LaTeX 修订
  • 原文地址:https://www.cnblogs.com/caesura-k/p/11909907.html
Copyright © 2011-2022 走看看