我有一個活動和3片段的應用程序。如何將ArrayAdapter <String>從活動傳遞到片段
在我有一個適配器,到了我存儲日誌信息的活動 -
MainActivity.java(保持與琴絃適配器):
private ArrayAdapter<String> mLogListAdapter;
public void onCreate(Bundle savedInstanceState) {
.....
mLogListAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
android.R.id.text1);
if (savedInstanceState == null) {
MainFragment fragment = new MainFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("LOG", (Serializable) mLogListAdapter);
//bundle.putParcellable("LOG", (Parcellable) mLogListAdapter);
getFragmentManager().beginTransaction()
.replace(R.id.root, fragment, "main")
.commit();
}
}
而且我想使用適配器在我的第一個片段 -
MainFragment.java(應顯示與日誌字符串列表):
private ListView mLogList;
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
.........
mLogList = (ListView) view.findViewById(R.id.logList);
mLogList.setChoiceMode(ListView.CHOICE_MODE_NONE);
// THIS DOES NOT WORK
ListAdapter adapter =
(ListAdapter) savedInstanceState.getSerializable("LOG");
mLogList.setAdapter(adapter);
return view;
}
不幸的是,這不起作用(應用程序崩潰)。
我也嘗試添加一個公共方法的片段,把它的活動 - 但是mLogList
爲空,我得到NPE(如創建mLogList
之後 - 而不是在構造函數中,但在onCreateView
法):
MainActivity.java:
if (savedInstanceState == null) {
MainFragment fragment = new MainFragment();
fragment.setAdapter(mLogListAdapter);
getFragmentManager().beginTransaction()
.replace(R.id.root, fragment, "main")
.commit();
}
MainFragment.java:
public void setAdapter(ListAdapter adapter) {
mLogList.setAdapter(adapter); // GIVES NPE
}
請告訴我如何將我的適配器傳遞給碎片。
UPDATE:
我已經試過異常情人的建議(感謝+1),但出現此錯誤:
The method putParcelableArrayList(String, ArrayList) in the type Bundle is not applicable for the arguments (String, ArrayAdapter)
而我不是,肯定其中的quickfix建議我應該採取:
而且我在想,爲什麼不能savedInstanceState
使用 - d o當從Activity到Fragment傳遞數據時,我真的需要創建一個新的Bundle
對象嗎?
你可以通過它在片段的構造函數,賦值給變量。 – Satty