我有一些麻烦试图将从我的api接收到的对象传递给特定的Fragment,这个对象是来自API的json并且它是动态的,它可以返回一个json,如:
{
"number1" : "45545455",
"number2" : "58454556",
"email1" : "test@test.com",
"email2" : "test2@test2.com",
"name" : "Fett Shop",
"description" : "Big sales"
}
这个json总是在变化,所以它可以没有number2或email2,或者它可以附带第三或第四个电子邮件或号码。 在我的OnResponse方法中,我得到了响应并将其保存在对象中:
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
if(resp.getResult().equals(Constants.SUCCESS)) {
Object test2 = resp.getResponse();
//In this part i was trying passing the object with Bundle
goToContact();
}
}
我正在读取传递Bundle创建一个带有Serialized或Parcelable的类,但我不知道如何将这个动态Object传递给另一个Fragment。 我感谢任何帮助!
答案 0 :(得分:0)
通过使模型类Serializable或Parcelable可以在fragment和Activities之间传递对象。
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
if(resp.getResult().equals(Constants.SUCCESS)) {
Fragment fragment = new Fragment();
Object test2 = resp.getResponse();
Bundle bundle = new Bundle();
bundle.putParcelable("Object", test2 );
fragment.setArguments(bundle);
}
}
要在onCreate函数中使用另一个片段中的bundle来获取它:
Object newObject = (NewObject) bundle.getParcelable("Object");
答案 1 :(得分:0)
您可以在包中传递单个响应对象。
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
if(resp.getResult().equals(Constants.SUCCESS)) {
Object test2 = resp.getResponse();
//In this part i was trying passing the object with Bundle
Bundle bundle = new Bundle();
bundle.putString("number1", test2.getString("number1");
bundle.putString("number2", test2.getString("number2");
bundle.putString("email1", test2.getString("email1");
bundle.putString("email2", test2.getString("email2");
goToContact();
}
}
不要在 Fragment 中传递 bundle。
<块引用>YourFragment newFragment = new YourFragment(); newFragment.setArguments(bundle);
获取 Fragment 中传递的数据。
Bundle b = getArguments();
String number1 = b.getString("number1");
String number2 = b.getString("number2");
String email1 = b.getString("email1");
String email2 = b.getString("email2");