Android 中Activity 之间传递参数
Android中Activity之间传递参数
1.传递简单数据
在AActivity中
findViewById(R.id.startBActicityBtn).setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ Intenti=newIntent(MainActivity.this,TheActivity.class); //对基础的数据类型进行传递 i.putExtra("data","我是国人"); startActivity(i); } });
在BActivity中接受数据
tv=(TextView)findViewById(R.id.TheTextView); Intenti=getIntent(); tv.setText(i.getStringExtra("data"));
这种传值就是传递基本的数据类型
2.传递数据包Bundle
在AActivity中
findViewById(R.id.startBActicityBtn).setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ Intenti=newIntent(MainActivity.this,TheActivity.class); Bundlebundle=newBundle(); bundle.putString("name","qll"); bundle.putInt("age",3); //i.putExtras(bundle); //另种传递方式 i.putExtra("data",bundle); startActivity(i); } }); }
在BActivity中接受数据
tv=(TextView)findViewById(R.id.TheTextView); editText=(EditText)findViewById(R.id.editText3); Intenti=getIntent(); //Bundledate=i.getExtras(); //接受方式不同 Bundledate=i.getBundleExtra("data"); tv.setText(String.format("name=%s,age=%d",date.getString("name"),date.getInt("age")));
这总传递方式类似iOS中传递字典数据类型过来。
3.传递值对象
自定义一个User类,传递自定义类需要对类进行序列化
用Serializable进行序列化
这种方法只需要类实现Serializable接口就可以了
User类
importjava.io.Serializable; publicclassUserimplementsSerializable{ privateStringname; privateintage; publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicUser(Stringname,intage){ this.name=name; this.age=age; }
在AActivity中
findViewById(R.id.startBActicityBtn).setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ Intenti=newIntent(MainActivity.this,TheActivity.class); i.putExtra("user",newUser("qll",24)); startActivity(i); } }); }
在BActivity中
tv=(TextView)findViewById(R.id.TheTextView); Useruser=(User)i.getSerializableExtra("user"); tv.setText(String.format("userinfo(name=%s,age=%d)",user.getName(),user.getAge()));
用Parcelable实现
同样的需要实现Parcelable接口
User类
packagecom.example.wyhaiapple.transferdata1; importandroid.os.Parcel; importandroid.os.Parcelable; importandroid.text.ParcelableSpan; publicclassUserimplementsParcelable{ privateStringname; privateintage; publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicUser(Stringname,intage){ this.name=name; this.age=age; } @Override publicintdescribeContents(){ return0; } @Override publicvoidwriteToParcel(Parceldest,intflags){ dest.writeString(getName()); dest.writeInt(getAge()); } publicstaticfinalCreatorCREATOR=newCreator (){ @Override publicUsercreateFromParcel(Parcelsource){ returnnewUser(source.readString(),source.readInt()); } @Override publicUser[]newArray(intsize){ returnnewUser[size]; } }; }
在AActivity中与上面的相同
在BActivity中
tv=(TextView)findViewById(R.id.TheTextView); Useruser=(User)i.getParcelableExtra("user"); tv.setText(String.format("userinfo(name=%s,age=%d)",user.getName(),user.getAge()));
4.获取Activity的返回参数
在BActivity中
protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_the); tv=(TextView)findViewById(R.id.TheTextView); editText=(EditText)findViewById(R.id.editText3); findViewById(R.id.button2).setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ Intenti=newIntent(); i.putExtra("data",editText.getText().toString()); setResult(1,i); finish(); } }); } }
在AActivity中
startActivityForResult(i,0); @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); textView.setText("返回的值:"+data.getStringExtra("data")); }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!