0

Я вызываю метод loadCategory из разных элементов навигационного ящика. При первом вызове ViewPager загрузите правильные данные. Но при втором вызове данные не меняются. ViewPager показывает старые данные, пожалуйста, помогите.Как обновить фрагменты в ViewPager после обновления адаптера?

Заранее спасибо.

private void loadCategory(int id) { 
      toolbar.setTitle(categoryList[id]); 
      adapter = new PagerAdapter(getSupportFragmentManager()); 
      mViewPager.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
    } 

    public class PagerAdapter extends FragmentPagerAdapter{ 

    public PagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     super.destroyItem(container, position, object); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("shayari",currentShayaaris[position]); 
     Fragment SFragment = new ShayariFragment(); 
     SFragment.setArguments(bundle); 
     return SFragment; 
    } 

    @Override 
    public int getCount() { 
     return currentShayaaris.length; 
    } 
} 
+1

Можете ли вы разместить весь код? –

+0

перед тем же вопросом. любое обновление ??? –

ответ

2

Если вы находитесь внутри фрагмента, вы должны создать экземпляр адаптера, как этот

 adapter = new PagerAdapter(getChildFragmentManager()); 
0

Есть несколько способов обновления

При использовании FragmentPagerAdapter или FragmentStatePagerAdapter,

если вы хотите отключить фактические фрагменты, которые отображаются , вам нужно t o избегайте FragmentPagerAdapter и используйте FragmentStatePagerAdapter.

Проверьте эту ссылку для получения дополнительной информации. Update ViewPager

Override getItemPosition в вашем PagerAdapter

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

second way to update viewpager

0

Вам может понадобиться removeView и addView, чтобы перезагрузить ViewPager, чтобы получить новые изменения в вашей функции loadCategory после обновления адаптера.

 ViewGroup parent = (ViewGroup) mViewPager.getParent(); 
     if (parent != null) { 
      parent.removeView(mViewPager); 
      mViewPager.getAdapter().notifyDataSetChanged(); 
      parent.addView(mViewPager); 
     } 
+0

Я пробовал, но не работает. –

+0

Когда я вызываю метод loadCategory второй раз, он меняет данные рядом с следующим фрагментом. Но текущий фрагмент все еще показывает данные. –

+0

На самом деле, вы не можете назвать адаптер = новый PagerAdapter (getSupportFragmentManager()); каждый раз, когда вы хотите обновить адаптер. Вы только предполагаете просто удалить представление, notiffyDataSetchanged и добавить представление назад –