Activity与Activity,Fragment之间的数据传递方法
Activity与Activity的通信
方法一:利用intent来传值
//传值部分
Intent intent = new Intent();
intent.putExtra(key,value);
startActivity(intent);
//接收数据部分
Intent intent = this.getIntent().getExtra();
String s = intent.getString(key);
方法二:利用Bundle来传值
//传值部分
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
Bundle bundle = new Bundle();
bundle.putString(key,value);
intent.putExtras(bundle);
startActivity(intent);
//接收部分
Bundle bundle = getActivity().getIntent().getExtras();
String number = bundle.getString(key);
以上两种方法均可使用,但是一般用方法二。
方法三:传递Bitmap类,实现了Parcelable借口,所以如果想要传递Bitmap对象则可以直接传递过去
public void onClick(View view) {
Intent intent = new Intent(this, TwoActivity.class);
intent.putExtra("key", "value");
Bitmap bitmap = BitmapFactory.
decodeResource(getResources(), R.mipmap.ic_launcher);
intent.putExtra("bitmap", bitmap);
startActivity(intent);
}
在第二个activity接收
((ImageView) findViewById(R.id.image))
.setImageBitmap((Bitmap) getIntent().getParcelableExtra("bitmap"));
方法四:如果想要传递实体类,则需要该实体类实现Serializable接口
public class Student implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
}
传递部分
Student student = new Student();
student setName("lily");
intent.putExtra("name",student);
startActivity(intent);
接收部分
Intent intent = getIntent();
Student student = (Student) intent.getSerializableExtra("name")
方法五:有时候我们需要在第二个Activity中做了一些操作后返回上一个Activity的时候将数据返回给上一个Activity,那么我们就需要调用(此方法在Activity与Fragment之间通信也可用)
startActivityForResult(intent,requestCode);
方法参数是Intent和requestCode
在第二个Activity中调用setResult方法返回:
private static final int resultCode = 2;
private void back() {
setResult(resultCode, new Intent());
finish();
}
并且在第一个Activity中通过重写onActivityResult方法接收数据:
requestCode是请求码,resultCode是结果码
requestCode是用来标识请求的来源; resultCode是用来标识返回的数据来自哪一个activity
关于请求码和结果码详情请参考(https://blog.csdn.net/u010542873/article/details/51219352)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 请求码 结果码
if(requestCode==this.requestCode&&resultCode==TwoActivity.resultCode){
//data就是上一个Activity调用setResult方法时传递过来的Intent
Toast.makeText(this,data.getStringExtra("a"),Toast.LENGTH_SHORT).show();
}
}
Activity与Fragment之间的通信
Activity向Fragment传值
方法一:利用setArguments()方法传值
该方法只适合在Fragment开始创建的时候就要拿到数据的时候使用。
//传值部分
private Fragment fragment;
Bundle bundle = new Bundle();
bundle.putString(key,value);
fragment.setArguments(bundle);
//接收数据部分
Bundle bundle=getArguments();
String str=bundle.getString("argument");
方法二:利用Bundle传值——适用于不同的Activity与Fragment
这种方法跟两个Activity的之间的数据传递基本一致,不同的是,在向Fragment传递数据时,Main1Activity是要传递数据的Activity,而Main2Activity是Fragment所依赖的Activity,然后再在目标Fragment内接收数据。
//传值部分
Intent intent = new Intent(Main1Activity.this,Main2Activity.class);
Bundle bundle = new Bundle();
bundle.putString(key,value);
intent.putExtras(bundle);
startActivity(intent);
//接收部分(在fragment里面接收)
Bundle bundle = getActivity().getIntent().getExtras();
String number = bundle.getString(key);
Fragment向Activity传值
方法一:通过getActivity()方法获取到相应的Actvivity对象,然后调用Activity中的方法。
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.showToast("呵呵");
方法二:使用接口回调方法传递,该接口回调方法只能用在fragment与所依赖的activity之间的数据传递。
//第一步:创建一个接口
public interface Onclick{
void OnclickListener(String s);
}
//第二步:在Fragment内声明这个接口
private Onclick oclick;
//第三步:创建修改器set方法
public void setOnclick(Onclick onclick){
this.onclick = onclick;
}
//第四步:在合适的位置调用接口对象以及接口方法,value是要传递的数据
onclick.OnclickListener(value);
//第五步:在所依赖的Activity内的合适位置调用该接口
Activity.setOnclick(new Onclick(){
public void OnclickListener(String s){
}
});
详细分析,前四个步骤都是在Fragment内完成,最后一步是在Activity内完成的,接口方法OnclickListener(String s)中s就是要传递的数据,在第四步的时候我们将要传递的数据value放在接口对象引用的方法内,然后在Activity内调用接口的时候,value就存进到public void OnclickListener(String s){}方法内的s,这个时候就可以拿到从fragment传递过来的数据了。
上一篇: 按钮逐渐覆盖颜色的css写法
推荐阅读
-
Activity与Fragment之间简单的数据传递
-
MainAcitvity与Fragment之间的数据传递
-
Activity与Activity,Fragment之间的数据传递方法
-
Fragment与Activity之间传递数据
-
Android Activity之间相互调用与传递参数的原理与用法分析
-
Android Activity之间相互调用与传递参数的原理与用法分析
-
Android Activity中使用Intent实现页面跳转与参数传递的方法
-
Android Fragment与Activity之间的相互通信实例代码
-
Android Activity中使用Intent实现页面跳转与参数传递的方法
-
Android Fragment与Activity之间的相互通信实例代码