I can use Parcelable in Activity, but I don't know how to use it in Fragment.
I have a ListFragment in a FragmentGet to display the entire row database in a ListView, I want to get ListView details in another fragment, when it clicked, I use Parcelable to transfer data between the fragments.
This is my 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]; } }; }
In FragmentSend.java I want to send data to FragmentGet.java, this is the code:
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(); }
In FragmentGet.java, I get this data:
public class FragmentGet extends Fragment {
When I run the application, I will get this error:
Trying to call the virtual method 'android.os.Parcelable android.os.Bundle.getParcelable (java.lang.String)' on a null object Link
How can I fix this error?
android parcelable fragment
Salar rastari
source share