2016-04-09 3 views
4

Ich habe ein ähnliches Tab-Layout, mit 4 Tabs.Android | stop TabLayout reload/refresh my Fragments

enter image description here

Wenn ich von Registerkarte 0 auf Tab 2 gehen und dann komme ich wieder Tab 0 wird Fragment0 neu geladen .. Die gleiche Problem, wenn ich von einem Register zu einem anderen „weggeht "Registerkarte.
Ich würde Fragment nur das erste Mal laden und sie ohne Neuladen wiederverwenden.

Dies ist ein Teil meines Codes (I this tutorial habe verwenden):

MyActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_activity); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    if(getSupportActionBar()!=null) { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     Window window = MyActivity.this.getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
     window.setStatusBarColor(ContextCompat.getColor(MyActivity.this, R.color.colorPrimaryDark)); 
    } 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF")); 
    tabLayout.setupWithViewPager(viewPager); 
    setupTabIcons(); //I have only icon, not text. 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(MyFragment.newInstance(0)); 
    adapter.addFragment(MyFragment.newInstance(1)); 
    adapter.addFragment(new DifferentFragment()); 
    adapter.addFragment(new TestFragment()); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment) { 
     mFragmentList.add(fragment); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return null; 
    } 
} 

my_activity.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabGravity="fill"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

Antwort

3

Ich löste es von mir Einfach, Verwendung:

viewPager.setOffscreenPageLimit(numberOfPages); 

Aus Referenz: Stellen Sie die Anzahl der Seiten, die auf beiden Seiten der aktuellen Seite in der Ansichtshierarchie in einem Ruhezustand beibehalten werden sollen .

In meinem Fall brauche ich Seiten, die beibehalten werden sollten.

0

ViewPager hält Fragmente links und/oder rechts der ausgewählten Registerkarte Dies ist für den schnellen Wechsel der Registerkarte erforderlich.

Sie können Referenzen Ihrer Fragmente in Ihrer Aktivität beibehalten, diese Referenzen können jedoch null sein.

+0

Wie kann ich Referenzen meiner Fragmente behalten? Dann überprüfe ich, ob es Null ist (und ich lade es). –

9

Wie Sie in der Dokumentation sehen setOffscreenPageLimit

In Ihrer Funktion setupViewPager (ViewPager viewPager) fügen Sie diese:

viewPager.setOffscreenPageLimit(limitNumberOfPages); //before setAdapter 
viewPager.setAdapter(adapter); 

Und die limitNumberOfPages ist ein int, der die Menge von Seiten enthält, die gescrollt werden kann ohne die Fragmente neu zu laden. Wenn Sie 4 Registerkarten haben, sollten Sie verwenden:

int limitNumberOfPages = 3; 

Die Standardnummer für diese Eigenschaft ist 1.

+0

Danke, aber ich habe es schon alleine gelöst! :) –

+0

diese Antwort hat mir geholfen +1 –

+0

Das hat mir geholfen. Vielen Dank –