方法一
创建intent后使用putExtra
intent.putExtra();//使用时尽量提取字符串放入键值对
方法二
使用Bundle(类似HashMap)
Bundle bundle=new Bundle();
bundle.putString(BUTTON_TITLE,getString(R.string.imooc)); intent.putExtra(BUTTON_TITLE,bundle);
startActivity(intent);
创建bundle然后使用put***方法放入键值对
使用时
if ( getIntent()!=null){
Bundle bundle=getIntent().getBundleExtra(MainActivity.BUTTON_TITLE);
if (bundle!=null) textView2.setText(bundle.get***(MainActivity.BUTTON_TITLE)); }
方法三
intent.putExtra
序列化
自定义一个类并实现Serializable,并且它的内部类也要实现序列化,优点方便不用实现方法但是对内存不友好
自定义一个类并实现Parcelable,并且它的内部类也要实现序列化,优点对内存友好但是不方便
B回到A
setResult();
如果是点击按钮结束当前页面返回则在其监听事件中加setResult();
1参RESULT_OK等表明关闭了通知前面的这种情况下打开B页面时就不能用
startActivity(intent)了用的是startAcitivityForResult(intent,Int);若有三变量加个bundle
----(此方法已过时官方给出的替代方案是registerForActivityResulthttps://developer.android.google.cn/training/basics/intents/result#kotlin)----
Int表示请求的结果(相当于给打开的页面一个编号,以便本页面能打开多个页面时知道刚才关闭的是哪个)A向B请求后B的setResult(RESULT_OK);表示ok还可以有第二个变量为Intent 可以使用intent.putExtra来添加数据
B中的返回 监听事件
findViewById(R.id.back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(); intent.putExtra("mooc","中国大学mooc"); setResult(RESULT_OK,intent); finish(); } });
在A Activity重写 onActivityResult
@Override //就是上文中的Int //B传回来的intent protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); // 表示刚才打开的是那个页面什么时候返回的 if (resultCode==RESULT_OK&&requestCode==999){ setTitle(data.getStringExtra("mooc" )); } }