Как использовать Parcelable в фрагменте для получения данных?

Я могу использовать Parcelable в действии, но я не знаю, как использовать его во Фрагменте.

У меня есть ListFragment в FragmentGet, чтобы отобразить всю базу данных строк в ListView, я хочу получить детали ListView в другом фрагменте, когда он щелкнут, я использую Parcelable для передачи данных между фрагментами.

Это мой Test.java:

import android.os.Parcel; import android.os.Parcelable; public class Test implements Parcelable { private int studentNumber; private String studentName; private String studentFamily; public int getStudentNumber() { return studentNumber; } public void setStudentNumber(int studentNumber) { this.studentNumber = studentNumber; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getStudentFamily() { return studentFamily; } public void setStudentFamily(String studentFamily) { this.studentFamily = studentFamily; } public Test() { } public Test(Parcel read) { studentNumber = read.readInt(); studentName = read.readString(); studentFamily = read.readString(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel write, int flags) { write.writeInt(studentNumber); write.writeString(studentName); write.writeString(studentFamily); } public static final Parcelable.Creator<Test> CREATOR = new Parcelable.Creator<Test>() { @Override public Test createFromParcel(Parcel source) { return new TestP(source); } @Override public Test[] newArray(int size) { return new TestP[size]; } }; } 

В FragmentSend.java Я хочу отправить данные в FragmentGet.java, это код:

 public class FragmentSend extends ListFragment { // Classes TestReadData readData; TestDataSource dataSource; private List<Test> listTest; public FragmentSend() { // Required empty public constructor } @TargetApi(Build.VERSION_CODES.M) @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_send, container, false); readData = new TestReadData(getContext()); dataSource = new TestDataSource(getContext()); refreshStudentList(inflater); return layout; } public void refreshStudentList(LayoutInflater inflater) { listTest = readData.getAllStudentRows(); ArrayAdapter<Test> testAdapter = new TestFragmentListAdapter(inflater.getContext(), listTest); setListAdapter(testAdapter); } @Override public void onResume() { super.onResume(); dataSource.open(); } @Override public void onPause() { super.onPause(); dataSource.close(); } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Test model = listTest.get(position); // this three line code is for Activity not Fragment! Intent intent = new Intent(getContext(), FragmentGet.class); intent.putExtra("Student", model); // startActivity(intent); // I use this code for fragment Fragment fragmentGet = new FragmentGet(); fragmentGet.setArguments(intent.getExtras()); FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.frame_container, fragmentGet); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } 

В FragmentGet.java я получаю данные следующим образом:

 public class FragmentGet extends Fragment { // Classes Test model; // Variables private List<Test> listTest; public FragmentGet () { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View layout = inflater.inflate(R.layout.fragment_get, container, false); // Classes Associated model = new Test(Parcel.obtain()); Bundle bundle = getActivity().getIntent().getExtras(); model = bundle.getParcelable("Student"); return layout; } 

Когда я запустил приложение, я получу эту ошибку:

Попытка вызвать виртуальный метод «android.os.Parcelable android.os.Bundle.getParcelable (java.lang.String)» на ссылке с нулевым объектом

Как я могу исправить эту ошибку?

Solutions Collecting From Web of "Как использовать Parcelable в фрагменте для получения данных?"

Передача данных в Fragments осуществляется с помощью Bundles но не Intents .

В FragmentSend изменение

 Intent intent = new Intent(getContext(), FragmentGet.class); intent.putExtra("Student", model); Fragment fragmentGet = new FragmentGet(); fragmentGet.setArguments(intent.getExtras()); 

к этому

 Fragment fragmentGet = new FragmentGet(); Bundle bundle = new Bundle(); bundle.putParcelable("Student", model); fragmentGet.setArguments(bundle); 

И чтобы получить данные в FragmentGet change

 Bundle bundle = getActivity().getIntent().getExtras(); model = bundle.getParcelable("Student"); 

в

 Bundle bundle = this.getArguments(); if (bundle != null) { model = bundle.getParcelable("Student"); }