0

Ich arbeite an einer Schublade App mit Fragmenten. Eine der Optionen in den Schubladen ruft ein Fragment auf, in dem ich eine tabellarische Ansicht (mit Fragmenten) einrichte, die Graphen zeigt.Android ViewPager zeigt keine Inhalte nach dem ersten Mal

Wenn ich die App zum ersten Mal ausführen, funktionieren meine Tabs einwandfrei, Inhalt, Grafik und alles sieht gut aus.

Sobald ich weg von diesem Fragment und zu einem anderen Fragment zu gehen, und kommen Sie zurück, zeigen die Registerkarten mit korrekten Titeln, aber keine Inhalte, keine Grafik nichts.

Hier ist mein Hauptfragment, das die viewpager aufstellt:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 

public class StatsMain extends Fragment { 
    private ViewPagerAdapter adapter = null; 
    private TabLayout tabLayout = null; 
    private ViewPager viewPager = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    return inflater.inflate(R.layout.stats_main, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
    tabLayout = (TabLayout) view.findViewById(R.id.tabs); 

    setupViewPager(viewPager); 
    tabLayout.setupWithViewPager(viewPager); 

} 

private void setupViewPager(ViewPager viewPager) { 
    adapter = new ViewPagerAdapter(getFragmentManager()); 
    adapter.addFragment(new Stats1(), "Stats 1"); 
    adapter.addFragment(new Stats2(), "Stats 2"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = 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, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 
} 

Und hier ist mein Layout für sie:

<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.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> 

Dies ist einer meiner Statistik() Fragmente. Die zweite sieht sehr ähnlich aus:

public class Stats1 extends Fragment { 
GraphView graph; 
public Stats1() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 


    return inflater.inflate(R.layout.stats1, container, false); 

} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState){ 
    Calendar calendar = Calendar.getInstance(); 
    Date d1 = calendar.getTime(); 
    calendar.add(Calendar.DATE, 1); 
    Date d2 = calendar.getTime(); 
    calendar.add(Calendar.DATE, 1); 
    Date d3 = calendar.getTime(); 
    calendar.add(Calendar.DATE, 1); 
    Date d4 = calendar.getTime(); 
    calendar.add(Calendar.DATE, 1); 
    Date d5 = calendar.getTime(); 

    graph = (GraphView) view.findViewById(R.id.graph); 
    StaticLabelsFormatter staticLabelsFormatter = new 
StaticLabelsFormatter(graph); 

    staticLabelsFormatter.setHorizontalLabels(new String[] {"old", "middle", "new"}); 

    graph.setTitle("Data History"); 
    LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[] { 
      new DataPoint(d1, 145.4), 
      new DataPoint(d2, 145.9), 
      new DataPoint(d3, 147.2), 
      new DataPoint(d4, 146.5), 
      new DataPoint(d5, 147.1) 
    }); 

    graph.getViewport().setScalable(true); 

    graph.addSeries(series); 
// set date label formatter 
    //graph.getGridLabelRenderer().setLabelFormatter(new 
DateAsXAxisLabelFormatter(this)); 
    graph.getGridLabelRenderer().setLabelFormatter(staticLabelsFormatter); 

    //graph.getGridLabelRenderer().setNumHorizontalLabels(6); // only 4 because of the space 
    series.setDrawDataPoints(true); 

// set manual x bounds to have nice steps 
    graph.getViewport().setMinX(d1.getTime()); 
    graph.getViewport().setMaxX(d5.getTime()); 
    graph.getViewport().setXAxisBoundsManual(true); 

// as we use dates as labels, the human rounding to nice readable numbers 
// is not necessary 
    graph.getGridLabelRenderer().setHumanRounding(false); 
} 

Ich benutze appsthatmatter/GraphView für grafische Zwecke.

versuchte ich es Debuggen und ich fand heraus, dass, nachdem ich aus den Registerkarten navigieren weg und kommen zurück, um die Funktion:

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

wird nicht mehr aufgerufen. Es macht zweimal das erste Mal, aber es wird nie, bis ich die App richtig schließe und neu starten.

Kann mir jemand helfen, herauszufinden, was ich nicht richtig mache, bitte?

Dank

Antwort

2

Ich habe es tatsächlich behoben. Ich hatte zu ändern:

adapter = new ViewPagerAdapter(getFragmentManager()); 

zu

adapter = new ViewPagerAdapter(getChildFragmentManager()); 
Verwandte Themen