У меня есть приложение с 1 активностью и 3 фрагментами.Как передать ArrayAdapter <String> от Activity to Fragment
В деятельности у меня есть адаптер, в котором будут храниться сообщения журнала -
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: предложение
Я попытался Exception Любителя (спасибо +1), но получаю эту ошибку:
The method putParcelableArrayList(String, ArrayList) in the type Bundle is not applicable for the arguments (String, ArrayAdapter)
И я не, конечно, какие из предложений QuickFix я должен принять:
Также интересно, почему не savedInstanceState
могут быть использованы - д o Мне действительно нужно создать новый объект Bundle
при передаче данных из Activity to Fragment?
вы можете передать его в конструктор фрагмента, и присвоить переменной. – Satty