Ответ, опубликованный здесь Шерил Саймон, является полностью правильным, однако это не может объяснить это слишком ясно для новичка в Android или Java. Пожалуйста, позвольте мне развить ее ответ.
Лучший и самый чистый способ сделать это с помощью интерфейса Parcelable.
Объявите класс, как показано ниже, который реализует Parcelable. Этот использует аксессор и мутатор, которые на самом деле не нужны.
public class JSonArrayParser implements Parcelable {
private JSONArray jsonArray;
public JSonArrayParser() {}
public JSonArrayParser(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
public void setJsonArray(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
public JSONArray getJsonArray() {
return jsonArray;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
}
Следующим шагом будет создание экземпляра этого класса (в данном случае JSonArrayParser) и его передача через Bundle, как в примере ниже.
// Это может быть Activity, Fragment, DialogFragment или любой класс, использующий тип пакета, такой как saveInstanceState.
jobItemsPopUp = new JobItemsPopUp();//This example uses a DialogFragment.
Bundle bundle = new Bundle();
JSonArrayParser jSonArrayParser = new JSonArrayParser(jsonArray);
bundle.putParcelable("jsonArray", jSonArrayParser);
jobItemsPopUp.setArguments(bundle);
jobItemsPopUp.show(getActivity().getSupportFragmentManager(), "JobItemsPopUp");
Способ получения значения будет следующим (я использовал onCreate, но вы можете получить значение в любом месте):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
this.jsonArray = ((JSonArrayParser) getArguments().getParcelable("jsonArray")).getJsonArray();
}
}
В качестве дополнительного примечания: вы можете сделать это с помощью пользовательских конструкторов, но этот метод устарел в Google.
Старый устаревший метод (связанный с приложением compat v4 НЕ РЕКОМЕНДУЕТСЯ ) будет выглядеть следующим образом:
private Fragment MyFragment;
MyFragment = new MyFragment(jsonArray)
Надеюсь, что это поможет и прояснит некоторые вещи.
Интерфейс Parcelable может использоваться с любым классом данных с мутаторами и / или аксессорами или без них.