• [Android学习笔记]startActivityForResult和onActivityResult的使用


    发开过程中,免不了多个页面之间相互交互通信。

    Android中使用startActivityForResult方法和onActivityResult配合完成任务


    startActivityForResult方法:

    public void startActivityForResult (Intent intent, int requestCode)

    public void startActivityForResult (Intent intent, int requestCode, Bundle options)

    intent对象:

    启动目标Activity,传递数据

    requestCode码:

    如果此值大于等于0,将会在当前Activity的onActivityResult方法中作为判断回传的子Activity的依据


    onActivityResult 方法:

    protected void onActivityResult (int requestCode, int resultCode, Intent data)

    requestCode请求码:作为判断回传的子Activity的依据

    resultCode结果码:子Activity的操作结果表示

    intent对象:子Activity数据载体


    使用步骤:

    1.父Activity中重写onActivityResult方法

    2.使用startActivityForResult启动子Activity


    Ex:

    1.MainActivity

            Button btn = (Button)findViewById(R.id.btnGotoSecondActivity);
            btn.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View arg0)
                {
                    // TODO Auto-generated method stub
                    
                    // 设置传递的数据
                    Intent intent = new Intent(arg0.getContext(),SecondActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putString("data", "hello third activty");
                    intent.putExtra("data", bundle);
                    
                    // 设置请求码
                    startActivityForResult(intent, SecondActivityRequestCode);
                }
            });
            
            Button btnThird = (Button)findViewById(R.id.btnGotoThirdActivity);
            btnThird.setOnClickListener(new View.OnClickListener()
            {
                
                @Override
                public void onClick(View arg0)
                {
                    // TODO Auto-generated method stub
                    
                    // 设置传递的数据
                    Intent intent = new Intent(arg0.getContext(),ThirdActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putString("data", "hello third activty");
                    intent.putExtra("data", bundle);
                    
                    // 设置请求码
                    startActivityForResult(intent, ThirdActivityRequestCode);
                }                                                                      
            });
    MainActivity

    2.onActivityResult

        /* requestCode:请求码
         * 用于标识回传的子Activity,根据此值判断是从哪一个子Activity返回的,它与startActivityForResult方法中的requestCode对应
         * 
         * resultCode:结果码
         * 是子Activity的一个结果标识,一般在子Activity中定义,子Activity操作结束之后,使用setResult方法设置子Activity的结果状态
         * 父Activity根据此结果码判断为对应的Activity做不同的处理
         * 
         * example:
         * if(requestCode == secondActivityRequestCode)
         * {
         *    if(resultCode == SecondActivityResultCodeSuccess)
         *    {
         *        // do success
         *    }
         *    else if(resultCode == SecondActivityResultCodeFail)
         *    {
         *        // do fail
         *    }
         * }
         * 
         * data:Intent对象
         * 子Activity的Intent对象,从此对象中获取Bundle载体,获取子Activity传递的数据
         * 
         * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
    
            // 从SecondActivity返回
            if(requestCode == SecondActivityRequestCode)
            {
                Intent intent = data;
                Bundle bundle = intent.getExtras();
                
                // 如果SecondActivity操作成功
                if(SecondActivity.SecondActivityResultCode1 == resultCode)
                {
                    String dataString = bundle.getString("data");
                    Toast.makeText(this, "get data from SecondActivity" + SecondActivity.SecondActivityResultCode1,Toast.LENGTH_SHORT).show();
                }
                else if(SecondActivity.SecondActivityResultCode2 == resultCode) // 如果SecondActivity操作失败
                {
                    String dataString = bundle.getString("data");
                    Toast.makeText(this, "get data from SecondActivity" + SecondActivity.SecondActivityResultCode2,Toast.LENGTH_SHORT).show();
                }
            }
            else if(requestCode == ThirdActivityRequestCode) //从ThirdActivity返回
            {
                Intent intent = data;
                Bundle bundle = intent.getExtras();
                String dataString = bundle.getString("data");
                
                Toast.makeText(this, "get data from ThirdActivity :" + dataString,Toast.LENGTH_SHORT).show();
            }
        }
    onActivityResult

     3.SecondActivity

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            // TODO Auto-generated method stub
            // return super.onKeyDown(keyCode, event);
            // 如果是物理返回按键
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
            {
                // 获取Intent
                Intent itent = this.getIntent();
                
                // 创建Bundle对象,设置需要回传的数据
                Bundle bundler = new Bundle();
                bundler.putString("data", "i ' m come from SecondActivity");
                
                // 为Intent设置数据载体Bundle
                itent.putExtras(bundler);
    
                // 设置结果
                // this.setResult(SecondActivityResultCode1, itent);
                this.setResult(SecondActivityResultCode2, itent);
                
                // 结束当前Activity
                this.finish();
    
                return false;
            } else
            // 如果不是物理返回按键则正常响应
            {
                return super.onKeyDown(keyCode, event);
            }
        }
    SecondActivity
    人生就是一局不能Again的DOTA
  • 相关阅读:
    事务(十四)
    事务(十三)
    事务(十二)
    事务(十一)
    事务(十)
    try中定义输入流报错:Try-with-resources are not supported at language level '5'
    IDEA新建时没有java class选项
    Hex编码
    Git Bash安装及常规使用
    PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/hellenism/p/3671006.html
Copyright © 2020-2023  润新知