Я покажу вам код, чтобы помочь вам:
Модель
public class Model implements Parcelable {
private String name;
public Model(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected Model(Parcel in) {
name = in.readString();
}
public static final Creator<Model> CREATOR = new Creator<Model>() {
@Override
public Model createFromParcel(Parcel in) {
return new Model(in);
}
@Override
public Model[] newArray(int size) {
return new Model[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
}
}
MainActivity
Model currentObject = new Model();
currentObject.setName("Testing arguments");
TestFragment fragment = new TestFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("SampleObject", currentObject);
fragment.setArguments(bundle);
TestFragment
public class TestFragment extends Fragment {
Model model;
public TestFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
if (bundle != null) {
model = bundle.getParcelable("SampleObject");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_test, container, false);
TextView tvArgument = v.findViewById(R.id.tvTestArgument);
tvArgument.setText(model.getName());
return v;
}
}
Этот код работает правильно.
Но, как правило, в моем случае, когда мне приходится передавать данные между операциями или Fragmetns. Я не реализую Parcelable. Я использую Serializable, потому что это быстрее реализовать.
Пример с сериализуемым:
Модель
public class Model implements Serializable {
private String name;
public Model(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected Model(Parcel in) {
name = in.readString();
}
}
MainActivity
Model currentObject = new Model();
currentObject.setName("Testing arguments");
TestFragment fragment = new TestFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("SampleObject");
TestFragment
public class TestFragment extends Fragment {
Model model;
public TestFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
if (bundle != null) {
model = (Model) bundle.getSerializable("SampleObject");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_test, container, false);
TextView tvArgument = v.findViewById(R.id.tvTestArgument);
tvArgument.setText(model.getName());
return v;
}
}
Надеюсь, это поможет вам.