2

У меня есть viewpager с 5 вкладками, каждая вкладка - это фрагмент, показывающий разные данные для пользователя, каждый фрагмент имеет recycleview внутри себя, и мне нужно повторно вставить обновленные данные в recyclerview, когда пользователь меняет вкладку, и мне нужно обновить представлениеКак создать фрагмент в viewpager

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

Я попытался:

1- Я использовал FragmentStatePagerAdapter (ничего не происходит)

2- я Override метод getItemPosition для возврата PagerAdapter.POSITION_NONE; (Ничего не происходит)

3- setOffscreenPageLimit (0) (ничего не происходит) функции

4 обновления внутри каждого фрагмента будет называться onTabSelected (дает NullPointerException)

Как я могу воссоздать фрагмент из каждый раз, когда пользователь меняет вкладку , мне действительно нужно знать.

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

Сообщите мне, какой код следует публиковать, спасибо.

Редактировать: мои коды:

MainActivity:

public class Sefaresh_activity3 extends AppCompatActivity implements Serializable, Sefaresh3_interface { 
    Context context; 
    Toolbar mtoolbar; 
    private List<Food> food_list = new ArrayList<>(); 

    MyPagerAdapter adapter; 
    Custom_TabLayout mTabLayout; 
    ViewPager mpager; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sefaresh_activity3); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR); 
     } 

     context = this; 
     sqlHelper = new SqlHelper(this); 
setupTabs(); 

private void setupTabs() { 
     mtoolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(mtoolbar); 

     SpannableString s = new SpannableString(getTitle()); 
     s.setSpan(new TypefaceSpan(this, "IRAN Sans Bold.ttf"), 0, s.length(), 
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     setTitle(s); 

     try { 
      getSupportActionBar().setHomeButtonEnabled(true); 
      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     } catch (Exception e) { 
      L.m("something is wrong in toolbar section"); 
     } 

     adapter = new MyPagerAdapter(getSupportFragmentManager()); 

     mTabLayout = (Custom_TabLayout) findViewById(R.id.tab_layout); 
     mpager = (ViewPager) findViewById(R.id.viewpager); 
     mpager.setAdapter(adapter); 

     mTabLayout.setTabsFromPagerAdapter(adapter); 
     mTabLayout.setupWithViewPager(mpager); 

     mpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); 
     mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       L.m("tab selected" + tab.getPosition()); 
       mpager.setCurrentItem(tab.getPosition()); 

//     Sefaresh3_fragment all_fragment = (Sefaresh3_fragment) adapter.getFragment_all(); 
//     sefaresh3_fragment.onRefresh(); 

//     Sefaresh3_fragment sefaresh3_fragment = (Sefaresh3_fragment) adapter.fragment_all; 
//     adapter.notifyDataSetChanged(); 

      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

    } 

class MyPagerAdapter extends FragmentStatePagerAdapter { 
     // public ArrayList<Fragment> fragmentArrayList = new ArrayList<>(); 
     Fragment fragment_all; 
     Fragment fragment_pizza; 
     Fragment fragment_sandwich; 
     Fragment fragment_salad; 
     Fragment fragment_coca; 

     public Fragment getFragment_coca() { 
      return fragment_coca; 
     } 

     public Fragment getFragment_all() { 
      return fragment_all; 
     } 

     public Fragment getFragment_pizza() { 
      return fragment_pizza; 
     } 

     public Fragment getFragment_sandwich() { 
      return fragment_sandwich; 
     } 

     public Fragment getFragment_salad() { 
      return fragment_salad; 
     } 

     String[] tabs = { 
       "products", 
       "new products", 
       "featured", 
       "star", 
       "star2" 
     }; 

     @Override 
     public int getItemPosition(Object object) { 
      return PagerAdapter.POSITION_NONE; 
     } 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
      tabs = getResources().getStringArray(R.array.sefaresh3_tabs); 
     } 

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

     @Override 
     public Fragment getItem(int num) { 
      Fragment fragment = null; 
      orders = new Orders(); 
      orders.setOrders(all_orders); 
      switch (num) { 
       case 0: 
//     fragment_all = Sefaresh3_fragment.newInstance("all", ""); 
//     return new Sefaresh3_fragment().newInstance("all",""); 
        return Sefaresh3_fragment.newInstance("all",""); 
       case 1: 
        fragment_pizza = Sefaresh3_fragment.newInstance("pizza", ""); 
        return fragment_pizza; 
       case 2: 
        fragment_sandwich = Sefaresh3_fragment.newInstance("sandwich", ""); 
        return fragment_sandwich; 
       case 3: 
        fragment_salad = Sefaresh3_fragment.newInstance("salad", ""); 
        return fragment_salad; 
       case 4: 
        fragment_coca = Sefaresh3_fragment.newInstance("coca", ""); 
        return fragment_coca; 
       default: 
        return fragment; 
      } 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return tabs[position]; 
     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 

    } 
+1

удалить setOffscreenPageLimit(); –

+0

Поместите то, что вы хотите обновить в 'OnResume' каждого' Fragment' –

+0

Если это не поможет вам опубликовать свой код при получении NullPointerException –

ответ

0

благодарит для всех предложений, после того, как одна неделя борется с этой проблемой, я нашел решение.

Я пробовал несколько методов, но, наконец, я нашел решение.

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

Если у кого-то была такая же проблема, я буду рада помочь ему :) спасибо.