• Android之startActivityForResult


    作用:当aAty跳转之bAty时,需要bAty回传数据,使用startActivityForResult。

    相关的函数:

    aAty:--跳转至bAty(intent可以传递数据)

    void android.app.Activity.startActivityForResult(Intent intent, int requestCode)

    bAty:

    void android.app.Activity.setResult(int resultCode, Intent data)

    aAty:

    void android.app.Activity.startActivityForResult(Intent intent, int requestCode)

    代码:

    aAty:

    public class MainActivity extends Activity implements OnClickListener {
        private Button bt_jumpAnotherAty;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bt_jumpAnotherAty = (Button) findViewById(R.id.bt_jumpAnotherAty);
            bt_jumpAnotherAty.setOnClickListener(this);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (resultCode) {
            case RESULT_OK:
                String result = data.getStringExtra("result");
                Log.d("h_bl", result);
                break;
    
            default:
                break;
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.bt_jumpAnotherAty:
                Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
                startActivityForResult(intent, 0);
                break;
    
            default:
                break;
            }
        }
    
    }

    bAty:

    public class AnotherActivity extends Activity implements OnClickListener {
        private Button bt_setResult;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_another);
            bt_setResult = (Button) findViewById(R.id.bt_setResult);
            bt_setResult.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.bt_setResult:
                // 数据是使用Intent返回
                Intent intent = new Intent();
                // 把返回数据存入Intent
                intent.putExtra("result", "My name is h_bolin");
                // 设置返回数据
                AnotherActivity.this.setResult(RESULT_OK, intent);
                // 结束该Aty,这点很重要。
                AnotherActivity.this.finish();
                break;
    
            default:
                break;
            }
        }
    
    }

    详解:bAty被销毁时 -- finish(),会返回数据。

    PS.

    1.一般不会在bAty的onCreate()方法写setResult()方法,需要在调用的时候,才会调用。

    2.按Back键,Android会自动调用Aty的finish()方法。

    3.可以重写onBackPressed()方法,对Back键的事件处理。

    String result = data.getStringExtra("reslt");

    4.取值时,要name要写对,不然会报以下错误:

    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} to activity {com.example.startactivityforresultdemo/com.example.startactivityforresultdemo.MainActivity}: java.lang.NullPointerException: println needs a message

    startActivityForResult() 中requestCode 和 resultCode 的作用:

    使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。

    详见:

    http://blog.csdn.net/donglynn/article/details/22693835

  • 相关阅读:
    101 上传之手动触发选在文件的上传弹出选择文件框
    11js统一设置多个样式cssText
    11 路由切换时候去掉某个路由的动画效果
    摩尔投票法
    三元环计数
    一些求和式的估算 & 杜教筛时间复杂度证明
    常胜将军!
    20220205 数论
    疯狂JAVA讲义学习——基础代码练习——内部类
    JAVA面向对象学习——java集合———List——List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复的元素,并通过索引访问。
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/5267746.html
Copyright © 2020-2023  润新知