在activityA
我有一個listview
,其中每個項目是自定義Parcelable
對象。在listViewItemClick
我表現出fragment
有兩個參數,其中我把bundle
用這種方法:捆綁包返回長而不是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();
}
在FragmentA
我需要使用選自定義Parcelable
對象,所以我把它在onCreate
從bundle
這樣的:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
currentObject = bundle.getParcelable(KEY);
objectID = bundle.getLong(KEY);
...
}
注:currentObject是在fragment
定義的私人CustomParcelable
,ObjectId存在於fragment
長定義的私有,關鍵是public final string
定義d在fragment
。
當我稍後在我的某個方法中使用currentObject時,它返回NPE,因爲currentObject爲null。調試時顯示它得到Parcelable
,但是具有objectID的值。
數據傳遞是否正確?什麼導致currentObject爲null?
爲什麼您使用相同的密鑰兩種DATAS清除您的疑問?對兩種數據使用不同的密鑰 – Sanoop
我應該使用不同的密鑰嗎?如果是的話,爲什麼呢? –
,因爲在捆綁中我們使用鍵值對計劃,所以對於兩個不同的值,您應該使用兩個鍵 – sumit