zoukankan      html  css  js  c++  java
  • startActivityForResult 和 onActivityResult

    参考:https://blog.csdn.net/hellobenji/article/details/79978701

    https://www.jianshu.com/p/5f3953bc012e

    在开发项目过程中,startActivityForResult是最常见的,它的使用场景就是:比如从AActivity跳转到BActivity,然后在BActivity中做一系列操作,然后在BActivity关闭时候需要把一些数据再回传给AActivity,或者当BActivity关闭后,需要让AActivity的界面或者数据发生一些变化,这个时候就需要用到 startActivityForResult。
    MainActivity.java
    package com.example.myapplication;
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    public class MainActivity extends AppCompatActivity {
    
        private static final String TAG = "test";
        final int REQUEST_CODE = 100;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            Log.d(TAG, "onCreate: test 1 ");
            Log.e(TAG, "onCreate: test 2 ");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button bt = findViewById(R.id.button1);
            bt.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view) {
                    Toast.makeText(MainActivity.this,"button is clicked",Toast.LENGTH_SHORT).show();
                    Log.e(TAG,"==========匿名内部类======1====");
                    Log.d(TAG,"==========匿名内部类======2====");
                }
            });
    
            Button bt2 = findViewById(R.id.button2);
            MyClickListener mcl = new MyClickListener();
            bt2.setOnClickListener(mcl);
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Log.e(TAG, "onActivityResult: requestCode:" + requestCode);
            Log.e(TAG, "onActivityResult: resultCode:" + resultCode);
            if(requestCode == this.REQUEST_CODE){
                switch(resultCode){
                    case RESULT_OK:
                        Bundle b = data.getExtras();
                        String str = b.getString("Result"); //获取 Result 中的值,为 "from Activity2"
                        Log.e(TAG, "onActivityResult: str:" + str);
                        break;
                    default:
                        break;
    
                }
    
            }
    
        }
    
        class MyClickListener implements View.OnClickListener{
    
            @Override
            public void onClick(View view) {
                //在控制台输出一条语句
                Log.e(TAG,"刚刚点击的按钮时注册了内部类监听器对象的按钮");
                Intent intent = new Intent(MainActivity.this, secondActivity.class);
                //利用 Intent 传递数据。
                intent.putExtra("age",18);
                intent.putExtra("name","kelly");
                intent.putExtra("level",'A');
                //利用 Bundle 传递数据。
                Bundle myBundle = new Bundle();
                myBundle.putString("author","mole");
                intent.putExtras(myBundle);
                //startActivity(intent);
                startActivityForResult(intent,REQUEST_CODE);
            }
    
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
        }
    }

    secondActivity.java

    package com.example.myapplication;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.PersistableBundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    
    public class secondActivity extends AppCompatActivity {
        private static final String TAG = "secondActivity";
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
            super.onCreate(savedInstanceState, persistentState);
        }
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            
            Intent intent = getIntent();
            String name = intent.getStringExtra("name");
            int age = intent.getIntExtra("age",100);
            char level = intent.getCharExtra("level",'C');
    
            Log.e(TAG, "onCreate: name:" + name);
            Log.e(TAG, "onCreate: age:" + age);
            Log.e(TAG, "onCreate: level:" + level);
            Log.e(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
    
            Bundle myBundle = intent.getExtras();
            String author = myBundle.getString("author");
            Log.e(TAG, "onCreate: author:" + author);
    
            Intent intent2 = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("Result","from Activity2");
            intent2.putExtras(bundle);
            this.setResult(RESULT_OK,intent2); //通过 intent 将数据返回给 Activity1,RESULT_OK
    
    
            Button bt = findViewById(R.id.button_second);
    
            bt.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(secondActivity.this,"button is clicked",Toast.LENGTH_SHORT).show();
                    Log.e(TAG,"==========匿名内部类======secondActivity====");
                    finish();// end the activity
                   // Intent intent = new Intent(secondActivity.this, MainActivity.class);
                   // startActivity(intent);
                }
            });
        }
    }

  • 相关阅读:
    Google's Machine Learning Crash Course #01# Introducing ML & Framing & Fundamental terminology
    MySQL Crash Course #09# Chapter 17. Combining Queries: UNION
    MySQL笔记(二)数据库对象的创建和管理
    浅谈TCP/IP网络编程中socket的行为
    linux网络编程中的shutdown()与close()函数
    c++11中的线程、锁和条件变量
    多线程TcpServer
    TCP网络库:Acceptor、TcpServer、TcpConnection
    epoll 的accept , read, write
    线程安全函数
  • 原文地址:https://www.cnblogs.com/yuguangyuan/p/13218912.html
Copyright © 2011-2022 走看看