Wie wird Parcelable in fragment zum Abrufen von Daten verwendet?
Ich kann Parcelable in Activity verwenden, aber ich weiß nicht, wie ich es in Fragment verwenden soll.
Ich habe ein ListFragment in FragmentGet, um alle Zeilendatenbanken in ListView anzuzeigen. Ich möchte Details von ListView in einem anderen Fragment abrufen, wenn es angeklickt wird. Ich verwende Parcelable, um Daten zwischen Fragmenten zu übertragen.
Das ist mein 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 Ich möchte Daten an FragmentGet.java senden. Dies ist der 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();
}
n der Datei FragmentGet.java erhalte ich folgende Daten:
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;
}
Wenn ich die App starte, erhalte ich folgende Fehlermeldung:
Versuchen Sie, die virtuelle Methode 'android.os.Parcelable android.os.Bundle.getParcelable (java.lang.String)' für eine Nullobjektreferenz @ aufzurufe
ie kann ich diesen Fehler behebe