В приложении для Android я загружаю данные из базы данных во TableView
внутренний файл Fragment
. Но когда я перезагружаю, Fragment
он отображает предыдущие данные. Могу ли я повторно заполнить Fragment
текущими данными вместо предыдущих?
android
android-fragments
Саманта Витхейдж
источник
источник
Ответы:
Я думаю, вы хотите обновить содержимое фрагмента при обновлении db
Если да, отсоедините фрагмент и снова прикрепите его.
Your_Fragment_TAG - это имя, которое вы дали своему фрагменту при его создании.
Этот код предназначен для библиотеки поддержки.
Если вы не поддерживаете старые устройства, просто используйте getFragmentManager вместо getSupportFragmentManager.
[РЕДАКТИРОВАТЬ]
Этот метод требует, чтобы фрагмент имел тег.
Если у вас его нет, то метод @ Hammer - это то, что вам нужно.
источник
Это обновит текущий фрагмент:
источник
Если у вас нет тега фрагмента, мне подходит следующий код.
источник
getActivity()
в моей деятельности. Стоит ли использоватьActivity.this...
?вы можете обновить свой фрагмент, когда он виден пользователю, просто добавьте этот код в свой фрагмент, это обновит ваш фрагмент, когда он станет видимым.
источник
Чтобы обновить фрагмент, принятый ответ не будет работать в версии Nougat и выше. Чтобы он работал на всех ОС, вы можете сделать следующее.
источник
Вы не можете перезагрузить фрагмент, пока он прикреплен к Activity, где возникает
Fragment Already Added
исключение.Таким образом, фрагмент необходимо сначала отсоединить от его активности, а затем присоединить. Все это можно сделать с помощью свободного API в одной строке:
Обновление: чтобы включить изменения, внесенные в API 26 и выше:
Дополнительное описание обновления см. На странице https://stackoverflow.com/a/51327440/4514796.
источник
это будет работать, только если вы используете
FragmentManager
для инициализации фрагмента. Если у вас есть это как<fragment ... />
в XML, он не будет вызыватьonCreateView
снова. Потратил свои 30 минут, чтобы понять это.источник
Вот что я сделал, и это сработало для меня, я использую firebase, и когда пользователь входит в систему, я хотел сначала обновить текущий фрагмент, вам нужно будет запросить контекст из активности, потому что у фрагмента нет способа получить контекст, если вы не установите его из Activity или context здесь это код, который я использовал и работал на языке котлин, я думаю, вы могли бы использовать то же самое в классе java
источник
Используйте
ContentProvider
и загрузите данные с помощью CursorLoader. С этой архитектурой ваши данные будут автоматически перезагружаться при изменении базы данных. Используйте сторонние фреймворки для себяContentProvider
- вы действительно не хотите реализовывать это самостоятельно ...источник
У меня была такая же проблема, но ничего из вышеперечисленного не помогло мне. либо возникла проблема с обратным стеком (после загрузки, когда пользователь нажал обратно, он снова перешел к тому же фрагменту), либо он не вызвал
onCreaetView
наконец я сделал это:
Хороший момент - вам не нужен ни тег, ни идентификатор фрагмента. если вы хотите перезагрузить
источник
Используйте метод onResume ... как для активности фрагмента, так и для активности, содержащей фрагмент.
источник
GeneralInfo
это мой класс фрагментаGeneralInfo.java
Я поместил это как метод в класс фрагмента:
источник
Например, с TabLayout: просто реализуйте OnTabSelectedListener. Чтобы перезагрузить страницу, вы можете использовать реализацию SwipeRefreshLayout.OnRefreshListener, т.е.
public class YourFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
метод onRefresh () будет @Override из интерфейса, т.е.
Вот макет:
Код в вашей деятельности
TabLayout tabLayout = (TabLayout) findViewById (R.id.tablayout); tabLayout.setupWithViewPager (viewPager);
источник
Напишите viewpagerAdapter.notifyDataSetChanged (); в onResume () в MainActivity. Удачи :)
источник
Самый простой способ
сделать общедоступный статический метод, содержащий viewpager.setAdapter
сделать адаптер и просмотрщик статическими
звонить куда угодно, любую активность, любой фрагмент.
источник