In activityA
habe ich ein listview
, von denen jedes ein benutzerdefiniertes Parcelable
Objekt ist. Auf listViewItemClick
zeigen, dass ich ein fragment
mit zwei Argumenten, die ich in bundle
mit dieser Methode setzen:Bündel returns lang anstelle von Parcelable
public void openFragment(CustomParcelable parcelableObject, long objectID) {
FragmentA fragmentA = new FragmentA();
Bundle bundle = new Bundle();
bundle.putParcelable(FragmentA.KEY, parcelableObject);
bundle.putLong(FragmentA.KEY, objectID);
fragmentA.setArguments(bundle);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, fragmentA);
transaction.commitAllowingStateLoss();
}
In FragmentA
ich die ausgewählte benutzerdefinierte Parcelable
Objekt verwenden müssen, damit ich es in onCreate
vom bundle
wie diese:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
currentObject = bundle.getParcelable(KEY);
objectID = bundle.getLong(KEY);
...
}
Hinweis: currentObject ein privates CustomParcelable
im fragment
definiert, objectID ist ein privater definiert lange in den fragment
, KEY ist public final string
definieren d in der fragment
.
Wenn ich CurrentObject später in einer meiner Methoden verwende, gibt es NPE zurück, da CurrentObject Null ist. Beim Debuggen zeigt es, dass es die Parcelable
bekommt, aber mit dem Wert von objectID.
Werden die Daten korrekt übergeben? Was bewirkt, dass currentObject gleich null ist?
löscht Warum sind Sie denselben Schlüssel für beide Daten verwendet? Verwenden Sie unterschiedliche Schlüssel für beide Daten – Sanoop
Sollte ich einen anderen Schlüssel verwenden? Wenn ja, warum? –
weil im bundle verwenden wir Schlüsselwertpaar Schema so für zwei verschiedene Werte sollten Sie zwei Schlüssel verwenden – sumit