2

Ich habe einen Viewpager mit 5 Tabs, jede Registerkarte ist Fragment zeigt verschiedene Daten für den Benutzer, jedes Fragment recycleview in sich selbst, und ich muss wieder in die recyclerview bei Benutzerwechsel Daten einfügen die Registerkarte, und ich muss die Ansicht aktualisierenWie erstelle ich das Fragment in Viewpager

Jedes Mal, wenn ich auf eine Registerkarte streichen, muss eine neue Instanz des Fragments in dieser Registerkarte geladen werden, damit die Daten aktualisiert werden.

I haben versucht:

1- I verwendet FragmentStatePagerAdapter (nichts geschieht)

2- I getItemPosition Methode überschreiben PagerAdapter.POSITION_NONE zurückzukehren; (Nichts passiert)

3- setOffscreenPageLimit (0) (Nichts passiert)

4- Refresh-Funktion in jedem Fragment namens onTabSelected werden (gibt Nullpointer)

Wie ich Fragment neu aus Scratchen jedes Mal, wenn Benutzer den Tab ändern ich wirklich wissen müssen.

Ich habe mit diesem Problem für eine Woche mit keinem Fortschritt gekämpft. Ich schätze jede Hilfe, sei es ein Hinweis, ein Kommentar, ein Vorschlag.

Lassen Sie mich wissen, welchen Code ich veröffentlichen sollte, Danke.

Edit: meine Codes:

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

remove setOffscreenseiteLimit(); –

+0

Setzen Sie, was Sie in 'OnResume' von jedem' Fragment'update aktualisieren möchten –

+0

Wenn das nicht hilft, dann poste Ihren Code, wie Sie NullPointerException bekommen –

Antwort

0

Dank für alle Vorschläge, nach einer Woche mit diesem Problem zu kämpfen, fand ich die Lösung.

Ich habe mehrere Methoden ausprobiert, aber letztendlich habe ich nur die Lösung gefunden.

Ich verwendete Broadcast-Empfänger, um dem Fragment zu sagen, die Liste zu aktualisieren, und jedes Mal, wenn ich die Fragmente aktualisieren muss, um die Datenliste zu aktualisieren, rufe ich den Sender an. es ist super und es funktioniert gut

Wenn jemand das gleiche Problem hatte, werde ich glücklich sein, ihm zu helfen :) danke.

Verwandte Themen