Android学习笔记——Activity之间传递数据

在Activity中,经常有需要传输数据的时候,两个活动之间传输数据使用Intent来传递数据。
Intent可以携带数据,intent有许多的putextra方法的重载,可以存入数据。然后在被启动的活动中可以使用getIntent()方法来获得启动Activity的intent,然后就可以通过这个Intent来获取数据。

public class MainActivity extends AppCompatActivity {
        Button button;
        EditText editText;
        public static final String SEND_MESG = "MSG";
        public static final int RESPONSE_CODE = 1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button) findViewById(R.id.btn_startactivity);
            editText = (EditText) findViewById(R.id.et_mssage);
            button.setOnClickListener(new View.OnClickListener() {//设置点击时间
                @Override
                public void onClick(View view) 
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra(SEND_MESG, editText.getText().toString());//使用Inent传入Sting数据
                    startActivityForResult(intent, RESPONSE_CODE);//使用startActivityForResult()开启一个新的活动,并且加入请求码,用以判断是哪个活动开启了新活动
                }
            });
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //这个方法会在返回新的活动返回数据的时候调用,第一个参数是请求码,第二个参数是返回码,第三个参数是携带了回传数据的Intent
            if (requestCode == MainActivity. RESPONSE_CODE)
                switch (resultCode) {
                    case MainActivity.RESULT_OK: {
                        Toast.makeText(MainActivity.this, data.getStringExtra("data_return"), Toast.LENGTH_SHORT).show();
                    }
                }
        }

    }

现在来看第二个活动

public class SecondActivity extends AppCompatActivity {
        TextView textView;
        EditText editText;
        Button button;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            button = (Button) findViewById(R.id.btn_response);
            editText = (EditText) findViewById(R.id.et_return);
            textView = (TextView) findViewById(R.id.tv_show);
            Intent intent = getIntent();
            String s = intent.getStringExtra(MainActivity.SEND_MESG);
            textView.setText(s);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent();
                    intent.putExtra("data_return",editText.getText().toString());//同样,在Intent中放入EditText中输入的数据
                    setResult(MainActivity.RESULT_OK,intent);
                    //然后再调用setResult()方法设置返回值
                    finish();
                }
            });
        }
    }

RequestCode的作用
请求码的值是由自已设定的,用来标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的处理;

ResutCode的作用
如果用startActivityForResult()方法打开多个不同的Activity,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):

简单的说,RequestCode是新活动用来判断哪个活动开启的它,ResultCode是用来判断返回的数据来自哪个新活动

猜你喜欢

转载自blog.csdn.net/m0_37076574/article/details/53907775