我工作的一個Android的項目,我想自定義類MainActivityModel
傳遞到Fragment
,MainActivityPlaceholderFragment
。Android何時序列化對象?
我已MainActivityModel
序列化:
public class MainActivityModel implements Serializable{
public int current = 0;
public int pageCount = 0;
public boolean pristine = true;
// Stores the fetched dataMap
public ArrayList<HashMap<String, String>> arrayList;
public MainActivityModel() {
this.arrayList = new ArrayList<>();
}
public String getCategory() {
return Util.categories[current];
}
public CharSequence getmTitle() {
return Util.toTitleCase(
Util.mapCategoryPretty(Util.categories[current]));
}
}
,我把它傳遞給Fragment
這樣的:
public static MainActivityPlaceholderFragment newInstance(MainActivityModel mainActivityModel) {
MainActivityPlaceholderFragment fragment = new MainActivityPlaceholderFragment();
Bundle args = new Bundle();
args.putSerializable(ARG_DATA_MODEL, mainActivityModel);
fragment.setArguments(args);
Log.v(LOG_TAG, "Created: " + mainActivityModel.getmTitle());
return fragment;
}
我訪問這樣的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivityModel = (MainActivityModel) getArguments().getSerializable(ARG_DATA_MODEL);
mMainActivityPlaceholderFragmentView = new MainActivityPlaceholderFragmentView(this, mainActivityModel);
mCallbacks.onPlaceholderFragmentCreated(mainActivityModel.current);
}
我最初認爲(在閱讀我在下面提到的答案後),,該序列化將數據轉換爲字節並在需要時將其恢復。。所以我的對象會被複制。這是好的,如果我只想訪問數據。但我也想從片段中修改實際模型(在MainActivity
中引用)。
爲了進行實驗,我在片段中將pristine
設置爲false
,並將其記錄在MainActivity
中,這確實是錯誤的。
但如果序列化是傳遞的價值,怎麼會這樣呢?
我讀過:
- What is object serialization?
- R: Pass by reference
- what is Serializable in Java
- What is serialization in Java?
無論它是否可序列化都沒關係...... bundle無法處理引用的點......它總是序列化/反序列化(parcel/unparcel)......只是想一下這種情況:Activity with一些意圖去背景,甚至殺死你回到它......爲什麼它回到了意圖?它不是引用...系統只是將它保存到包裹並在需要時重新創建 – Selvin
這是我的問題。如果它正在複製對象,那麼這些更改如何反映回MainActivity?這些更改應該僅限於片段。 – prakharsingh95
@ prakharsingh95通過複製對象你明白什麼? –