Допустим, у нас приложение для просмотра заметок с использованием фрагментов и RecyclerView
. Заметки хранятся в БД.
Если мы напишем код фрагмента следующим образом:
private DataBase dataBase;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_notes, container, false);
MainActivity activity = (MainActivity)getActivity();
dataBase = new DataBase(activity);
activity.changeToolbarTitle(getText(R.string.notes_tabItem).toString());
getNotes(activity);
return view;
}
private void getNotes(MainActivity activity){
RecyclerView recyclerView = (RecyclerView) activity.findViewById(R.id.recycleView);
recyclerView.setLayoutManager(new LinearLayoutManager(activity));
recyclerView.setAdapter(new NotesAdapter(dataBase.getNotes()));
}
то после добавления новой записи в другой Activity
и возврата в MainActivity
, где в виде RecyclerView
отображаются заметки, новой заметки не будет, пока не перезапустить приложение. Логично: ведь при возврате в MainActivity
, где находится фрагмент, onCreateView()
не вызывается, потому и вызова метода getNotes(activity)
, который получает свежую информацию из БД, тоже нет.
Однако, если учесть, что после onCreate()
всегда вызывается onResume()
, то почему бы не поместить вызов getNotes(activity)
в onResume()
?
private DataBase dataBase;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_notes, container, false);
MainActivity activity = (MainActivity)getActivity();
dataBase = new DataBase(activity);
activity.changeToolbarTitle(getText(R.string.notes_tabItem).toString());
return view;
}
@Override
public void onResume() {
super.onResume();
getNotes(activity);
}
Один экземпляр activity
нам всё равно нужен в onCreateView
для других целей ; мы его и создаём. Но он же нам нужен и в onResume()
для вызова getNotes()
, и в сам getNotes
, для использования findViewByID
и создания нового LinearLayoutManager
.
Вопрос: можно инициализировать MainActivity
только один раз или придётся это делать заново в onResume
? (Что касается getNotes
, то я передал activity
через параметр, но вероятно, это не лучшее решение).
Сделайте переход на новую activity
с помощью метода startActivityForResult
. На новой activity
отправляйте при добавление данных в БД можете добавить в intent
все id записей которые вы добавили, и при выходе из этой активити передавать в MainActivity
. А в методе onActivityResult
доставать эти записи по id из бд и добавлять их в список, при этом обновлять RecyclerView
либо по позициям добавления, либо весь список полностью
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, есть образец экзаменационного задания по программированию на JavaМожно ли получить совет, с чего начинать и в каком направлении...
Имеется xml с множеством элементовНекоторые элементы имеют одинаковое название но дочерние элементы могу отличаться
Как переместить индикаторы текущего слайдера на само изображение, а не под ним? Пример на скриншоте: