Обновленный фрагмент Android ViewPager

В моем приложении есть 2 вкладки (Библиотека поддержки Android), это фрагмент с ViewPagerAdapter:

public class ListaCanali extends Fragment { public static TabLayout tabLayout; public static ViewPager viewPager; public static int int_items = 2 ; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v =inflater.inflate(R.layout.lista_canali, container,false); //Titolo Fragment ((MainActivity) getActivity()).setActionBarTitle("Lista Canali"); //FindViewById tabLayout = (TabLayout) v.findViewById(R.id.tabs); viewPager = (ViewPager) v.findViewById(R.id.viewpager); //Funzioni Tab viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); tabLayout.post(new Runnable() { @Override public void run() { tabLayout.setupWithViewPager(viewPager); } }); return v; } //Adattatore Tab class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position){ case 0 : return new FragmentCanali(); case 1 : return new FragmentPreferiti(); } return null; } public int getCount() { return int_items; } public CharSequence getPageTitle(int position) { switch (position){ case 0 : return "Tutti"; case 1 : return "Preferiti"; } return null; } 

Я хочу обновить фрагмент приложения на Swipe и щелкнуть заголовок вкладки, потому что этого не происходит, надеюсь, вы сможете помочь мне, ребята.

Я уверен, что это не единственный / лучший способ сделать это. Но это должно решить проблему, как и со мной.

Пожалуйста, напишите методы refresh () в фрагментах FragmentCanali и FragmentPreferiti.

  public class ListCanali extends Fragment implements OnPageChangeListener{ private MyAdapter mAdapter; @Override public View OnCreateView (...) { ... if(mAdapter == null) { mAdapter = new MyAdapter(getChildFragmentManager()); } viewPager.setAdapter(mAdapter); viewPager.setOnPageChangeListener(this); ... } ... @Override public void OnPageSelected (int position) { switch (position){ case 0 : ((FragmentCanali)adapter.getItem(position)).refresh(); case 1 : ((FragmentPreferiti)adapter.getItem(position)).refresh(); } }} 

Он будет более чистым, если вы расширите оба фрагмента из базового фрагмента, который имеет метод abstract refresh ().

В onPageSelected () вы можете просто вызвать ((BaseFragment)adapter.getItem(position)).refresh()

Попробуй это…

Чтобы обновить фрагмент, вам нужно сначала его экземпляр.

Измените это

  viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

в

  ArrayList<Fragment> fr_list = new ArrayList<Fragment>(); fr_list.add(new FragmentCanali()); fr_list.add(new FragmentPreferiti()); MyAdapter mMyAdapter = new MyAdapter(getChildFragmentManager(),fr_list); viewPager.setAdapter(mMyAdapter); 

В случае изменения адаптера это

  public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position){ case 0 : return new FragmentCanali(); case 1 : return new FragmentPreferiti(); } return null; } public int getCount() { return int_items; } 

в

  public MyAdapter(FragmentManager fm,ArrayList<Fragment> fr_list) { super(fm); this.fr_list=fr_list; } @Override public Fragment getItem(int position) { return fr_list.get(position); } public int getCount() { return fr_list.size(); } 

Добавьте методы refresh () внутри фрагментов и вызовите их, когда вам нужно, как показано ниже

 ((FragmentCanali) mMyAdapter.fr_list.get(0)).refresh(); 

Принятый ответ не является хорошим способом, поэтому добавлено решение. После долгой борьбы найти Рабочее решение.

Просто сообщите об этом своему адаптеру , он работает потрясающе,

Код ссылки

  void setAdapter(int position) { PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(pagerAdapter); // when notify then set manually current position. viewPager.setCurrentItem(position); pagerAdapter.notifyDataSetChanged(); } 

Вызовите этот код, когда вы устанавливаете адаптер, и когда вы хотите обновить интерфейс.

В своем фрагменте добавьте ниже код для обновления интерфейса

 ((YourActivityName) getContext()).setAdapter(selectedTabPosition); 

Используйте instanceof для контекста каста.

Этот общий код помогает только тем, кто находит рабочее решение, с минимальным кодом