0

Ich habe ein Container-Fragment Acadmey, die eine viewpager enthält und viewpager bestehen aus verschiedenen child fragments. In den Kindfragmenten von View pager rufe ich die json-Anforderung auf, um die Daten zu erhalten, die aufgefüllt werden sollen. Zum ersten Mal funktioniert alles gut, aber wenn ich wieder nach main activity bekommen und wieder dem Rücken zur Ansicht Pager erhalten alle Inhalte des child fragment ist weggewischt und onActivityCreated Anrufe nur von der ersten Zeit daher meine viewpagers Seiten sind blank für jede Sekunde oder n mal ich geöffnet. Wie kann ich den Inhalt des Kindfragments für die Wiederverwendung speichern oder ist es eine beliebige Methode, die jedes Mal, wenn das Kindfragment von Viewpager wieder geöffnet wird, callbacked ist.Android - Speichern von Viewpager in einem Fragment

Mein Container Fragment: -

public class Academy extends Fragment { 
    ViewPager viewPager = null; 
    TabLayout tabLayout; 
    MyViewPagerAdapter adapter; 
    private String myString = "hello"; 

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


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Log.d("xx", "view started .............. papa"); 
    return inflater.inflate(R.layout.academy, container, false); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    tabLayout = (TabLayout) getActivity().findViewById(R.id.tablayoutacademy); 
    viewPager = (ViewPager) getActivity().findViewById(R.id.academypager); 
    adapter = new MyViewPagerAdapter(getActivity().getSupportFragmentManager()); 
    adapter.addfragment(new FragmentCourse(), "COURSES"); 
    adapter.addfragment(new FragmentEducator(), "EDUCATORS"); 
    viewPager.setAdapter(adapter); 
    tabLayout.setupWithViewPager(viewPager); 

} 

} 

Mein Viewpager Kinder Fragment (Kurse)

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


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Log.d("xx", "view course started..........................."); 
    progress=new ProgressDialog(getContext()); 
    progress.setMessage("Nukeing.."); 
    progress.show(); 
    return inflater.inflate(R.layout.fragmentcourse, container, false); 

} 

@Override 
public void onActivityCreated(Bundle jhoola2) { 
    super.onActivityCreated(jhoola2); 
      Log.d("xx", "acti cource started"); 
    recyclerView = (RecyclerView) getActivity().findViewById(R.id.rv2); 
    manager = new LinearLayoutManager(getActivity()); 
    recyclerView.setLayoutManager(manager); 
    recyclerView.setHasFixedSize(true); 
    Handler handler = new Handler() { 


     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      MyImageCompress ic=new MyImageCompress(); 

      Bundle bundle=new Bundle(); 
      bundle=msg.getData(); 

      title1 = bundle.getStringArrayList("C_name"); 
      dec1=bundle.getStringArrayList("Discription"); 
      image1=bundle.getStringArrayList("Image"); 
      for (int i = 0; i < image1.size(); i++) { 

       imageArray1.add(ic.StringToBitMap(image1.get(i))); 
       Log.d("handleMessage: "," Final parse" +i); 
      } 
      Log.d("handleMessage: EDU ", title1.size() + "" + dec1.size() + imageArray1.size()); 
           adapter = new RecyclerAdaptra(title1, dec1, imageArray1); 
      progress.hide(); 

      recyclerView.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 

     } 
    }; 
    GetCources gc= new GetCources(url,handler); 
    gc.executeRequest(); 
    } 
} 

* My ViewPager Adapter *

class MyViewPagerAdapter extends FragmentPagerAdapter { 
ArrayList<Fragment> fragments = new ArrayList<Fragment>(); 
ArrayList<String> tabtitles = new ArrayList<String>(); 

public void addfragment(Fragment fragments, String titles) { 
    this.fragments.add(fragments); 
    this.tabtitles.add(titles); 
} 

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

@Override 
public Fragment getItem(int i) { 
    return fragments.get(i); 

} 

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

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

Antwort

0

Wenn ein ViewPager mit Innen a Fragment, müssen Sie Verwenden Sie getChildFragmentManager() anstelle von getSupportFragmentManager(). Die Fragmente in dem Pager sind untergeordnete Elemente des Containerfragments, nicht des übergeordneten Kontexts.

Verwandte Themen