Мне сложно разобраться в следующем.
Что у меня: У меня есть просмотрщик и несколько страниц. В этом вопросе важны только два из них, назовем их Fragment1 и Fragment2, и они находятся рядом друг с другом. Fragment1 содержит список, заполненный данными из Интернета (внешняя база данных). Фрагмент2 содержит простую кнопку.
Моя цель:. Если я нажму кнопку Fragment2, я добавлю новый элемент во внешнюю базу данных. Я хотел бы обновить/обновить список в Fragment1 с помощью этого нового элемента.
notifyDataChanged()
не работает в моем случае, однако до сих пор я был уверен, что он восстанавливает все страницы. Я собираюсь представить свою проблему самым ясным способом, поэтому я могу видеть код, который у меня есть, это мой ViewPager
:
class MyPagerAdapter extends FragmentStatePagerAdapter {
public List<String> fragmentsA;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
fragmentsA = fragments;
}
@Override
public Fragment getItem(int position) {
return Fragment.instantiate(context, fragmentsA.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return mEntries.get(position % CONTENT.length).toUpperCase();
}
@Override
public int getCount() {
return mEntries.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
Fragment1 onCreateView() (в ближайшее время):
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
getData();
View view = inflater.inflate(R.layout.latestapps_tab, container, false);
lw = (ListView) view.findViewById(R.id.lw);
context = getActivity().getApplicationContext();
act = this.getActivity();
m_adapter = new ItemAdapter();
lw.setAdapter(m_adapter);
return view;
}
Я создаю ViewPager
и адаптер, я устанавливаю адаптер для ViewPager
, после чего я заполняю свой просмотрщик моими фрагментами в моем основном классе. После этого я собираюсь иметь полностью функциональный ViewPager с 2 фрагментами.
pager = (ViewPager)findViewById( R.id.viewpager );
adapter = new MyPagerAdapter(getSupportFragmentManager());
indicator = (TabPageIndicator)findViewById( R.id.indicator );
pager.setAdapter( adapter );
indicator.setViewPager( pager );
pager.setCurrentItem(INITIAL_PAGE);
pager.setOffscreenPageLimit(3);
//adding fragments to the pager
fragments.add( Fragment1.class.getName());
fragments.add( Fragment2.class.getName());
В Fragment1 у меня есть listview с некоторыми текстовыми комментариями в каждом элементе списка. Загрузка отлично работает: я создаю ArrayLists
, и я заполняю списки с данными из внешней базы данных. После того, как загрузка завершена, я заполняю списки с этими тоннами данных.
В Fragment 2 я нажимаю кнопку, и мне бы хотелось, чтобы этот список был обновлен, поэтому в списке можно создать новую строку с некоторыми данными из внешней базы данных. (конечно, запись в базу данных работает)
Мое предположение, что я не могу обновить ArrayLists или я не буду восстанавливать Fragment1, поэтому метод getDataFromSQL() никогда не будет работать, только если я выйду и запустим приложение снова, или я так сильно провёл в ViewPager, что Fragment1 отделится, Поэтому я не могу обновить или обновить Fragment1. Может ли кто-нибудь помочь в этом вопросе?
ИЗМЕНИТЬ
Мне удалось сделать это с доставкой сообщения для фрагмента2, чтобы обновить себя. Но я не уверен, что это хорошее решение, и нет лучшего способа, то есть просто освежить как-то весь фрагмент.
Решение
Хорошо, я думаю, что это была моя лень, но я решил это сейчас. Для всех, кто все еще хочет обновить фрагмент из другого или просто сделать связь между фрагментами, я расскажу вам о соответствующем подходе:
-
Вы должны реализовать свой собственный слушатель, который поможет вам обмениваться данными между фрагментами через активность держателя. Это можно найти здесь: http://developer.android.com/training/basics/fragments/communicating.html. Очень простой и полезный.
-
Вам нужно извлечь фрагмент, который снова прост: Получить фрагмент из ViewPager Эти Q предлагают несколько приемлемых способов, я использовал
SpareArray
решение.
Спасибо за помощь в любом случае!