2

В моем приложении у меня есть 3 фрагмента в viewPager. Для первого фрагмента я хотел бы перезагрузить представление после нажатия кнопки (в основном снова вызвать onCreateView()).Обновить фрагмент в ViewPager

Чтобы получить эту функциональность, я решил использовать FragmentTransaction, detach(), attach() и commit() фрагмента.

В фрагменте я создал SetData() метод:

public void setData() { 
    Fragment frg = null; 
    frg = mainMenu.getFragmentByPosition(); 
    final android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.detach(frg); 
    ft.attach(frg); 
    ft.commit(); 
} 

В своей деятельности, которая удерживает ViewPager у меня есть getFragmentByPosition() метод:

public Fragment getFragmentByPosition() { 
    String tag = "android:switcher:" + R.id.viewpager + ":" + viewPager.getCurrentItem(); 
    return getSupportFragmentManager().findFragmentByTag(tag); 
} 

Проблема заключается в том, что я получаю NullPointerException в getFragmentByPosition()

ОБНОВЛЕНИЕ

Проблема в том, что я не могу получить ссылку на текущий фрагмент.

adapter.getItem(1) - возвращает null

getFragmentManager().getFragments().get(0) - возвращает null

+0

Вы пробовали с помощью 'adapter.notifyDataSetChanged();' – Dhruv

ответ

0

Если у вас есть 3 фрагмента, создать 3 уникальные строки TAG1, TAG2, TAG3, а затем добавить каждый фрагмент, используя свой уникальный тег

getSupportFragmentManager().beginTransaction().add(R.id.mycontainer, new MyFragment1(), TAG1).commit(); 

Тогда найдите, используя теги:

getSupportFragmentManager().findFragmentByTag(TAG1); 
+0

Это также работает так, если фрагменты находятся в FragmentPagerAdapter? – user3844748

+0

FragmentPagerAdapter дает фрагмент для заданного положения. getItem (1) всегда должен возвращать ваш первый фрагмент, getItem (2) второй и т. д. Никаких тегов вообще. –

+0

Проблема в том, что адаптер.getItem (1) также имеет исключение NullPointerException. – user3844748