5

yükledikten sonra Merhaba fragment ve fragment ve ile bir çocuk bir uygulama tablayout ve viewpager kullanarak yapıyorum. Sorun tüm çocuğum fragment (from Tablayout) her zaman (kullanıcı fragment kullanıcı tıklattığınızda içeride tüm kodu yükleyin. sekmesine 2'ye kullanıcı slayt)TabLayout'taki Fragman sadece kullanıcı slayt Android

İşte

public class ManageEventFragment extends Fragment { 


    public ManageEventFragment() { 
     // Required empty public constructor 
    } 


    TabLayout tabLayout; 
    ViewPager viewPager; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View viewFragment = inflater.inflate(R.layout.fragment_manage_event, container, false); 

     viewPager = (ViewPager) viewFragment.findViewById(R.id.viewPager); 

     tabLayout = (TabLayout) viewFragment.findViewById(R.id.tabLayout); 

     viewPager.setAdapter(new CustomAdapter(getChildFragmentManager(), getContext())); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

     return viewFragment; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 

     //  tabLayout.setupWithViewPager(viewPager); 
     tabLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       tabLayout.setupWithViewPager(viewPager); 
      } 
     }); 

     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 
     }); 

     if (ViewCompat.isLaidOut(tabLayout)) { 
      tabLayout.setupWithViewPager(viewPager); 
     } else { 
      tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
       @Override 
       public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
        tabLayout.setupWithViewPager(viewPager); 
        tabLayout.removeOnLayoutChangeListener(this); 
       } 
      }); 
     } 

     super.onActivityCreated(savedInstanceState); 

    } 


    //TabLayout and ViewPager class 
    private class CustomAdapter extends FragmentPagerAdapter { 

     private String fragments[] = {"Edit Event", "Create Event"}; 

     public CustomAdapter(FragmentManager fragmentManager, Context context) { 
      super(fragmentManager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new EditEventFragment(); 
       case 1: 
        return new CreateEventFragment(); 
       default: 
        return null; 
      } 
     } 

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

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

    } 

} 

Ve çocuğum fragmanı kodu. Bunları kod yalnızca yürütmek istiyorum benim ebeveyn fragment kod olduğunda sekmesine 2'de sadece yük durumlarda çocuk sekmesine kullanıcı slayt. Herhangi bir yardım için teşekkür ederiz, teşekkürler

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

     //Initializing our listEvents list 
     listEvents = new ArrayList(); 

     recyclerView.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(getContext()); 
     recyclerView.setLayoutManager(layoutManager); 

     adapter = new EventAdapterEdit(getContext(),listEvents); 
     recyclerView.setAdapter(adapter); 


     requestQueue = Volley.newRequestQueue(getContext()); 

     adapter = new EventAdapterEdit(getContext(),listEvents); 
     recyclerView.setAdapter(adapter); 

     getEventDetailRespond(requestQueue); 
+0

'@Override ortak geçersiz kümeUserVisibleHint (boolean isVisibleToUser) { super.setUserVisibleHint (isVisibleToUser); } ' – k0sh

+0

yrs rep. Biraz daha detaylı tarif edebilir misin? Yukarıdaki çocuk parçası kodunu @Override public void setUserVisibleHint (boolean isVisibleToUser) {super.setUserVisibleHint (isVisibleToUser); }? –

+0

Android, tabView'e ne zaman bir geri arama ekleyecektir? – Zapnologica

cevap

4
@Override public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
} 
sen, daha doğrusu orada görüşlerini ya da bir şey başlatmak onViewCreated içinde görüşlerini init ve yöntemini çağırmayın için farkında olmak sizin ViewPager Adapter

if(isVisibleToUser){//dosomething when the fragment is visible} 
else{//dosomething else.} 

içinde sizin fragmanında yöntemle yukarıda kullanabilirsiniz

o setUserVisibleHint üzerinde yürütmek istiyorsun. Başka bir çirkin yol, ViewPager'unuza bir kaydırma dinleyicisi eklemek ve geçerli öğe konumunu almak ve parça içindeki bir eylemi tetiklemektir. Yapabileceğiniz ViewPagerAdapter den fragman almak için böyle:

MyFragment frag = (MyFragment) pager.getAdapter().instantiateItem(pager, position); 

o zaman, yani varsayılan yükler tarafından MyFragment

+0

1.yıl yöntemini denedim, ancak işe yaramıyor. Tüm görünüm kodunu OnCreateView'a taşıyorum ve yalnızca getEventDetailRespond (requestQueue) veri almak için yöntemi bıraktım; @Override public void setUserVisibleHint (boolean isVisibleToUser) { super.setUserVisibleHint (isVisibleToUser); } ama null pointer hatası var (getCventFileProjectspo (0). GetChildFragmentManager() yerine getEventDetailRespond –

+0

içinde progressbar.setvisibillity var getActivity(). GetSupportFragmentManager() ve bu sorunu çözüp çözemeyeceğini görmek için hala bazı hata ayıklama yapmak için teşvik ediyorum Ben cevap verdim. – k0sh

+0

basit bir test Tost mesajı ile çalışmak gibi görünüyor ama getirme veri yöntemimi koydum.Null işaretçisi döndürmek Burada benim yöntem kodu ve gösterilen hata https://docs.google.com/document/d/16APWQippnSNr0_BWqDQd36kzRA6IpbsLSHKIt0xgEFY/düzenleme –

1

Viewpager içinde uygulama pürüzsüz hale sağlamak için bitişik parçası olan bir yöntem diyebiliriz Kullanıcı parçalara (zaten yüklü) kaydırdığında orada var. Değiştirmek için varsayılan davranış, viewpager.setOffscreenPageLimit(int limit)'u kullanın; burada sınırın yanındaki kaç parça önceden yüklenecektir. Bu yardımcı olur

+0

çok teşekkürler. Yani, varsayılan olarak 3 parçam varsa, kullanıcı ana parçayı tıkladığında yalnızca ilk 2 parça yüklenecek mi? viewsetOffscreenPageLimit (int limit) (ebeveyn veya çocuk) nereye yerleştirilir? Bunu nasıl uygulayacağınız biraz detay verebilir mi? –

+0

Cevabımda yazım hatası yaptım. zaten düzenlenmiş. Bu yöntemi ViewPager'da çağırabilirsiniz. –

+0

Çalışmıyor gibiyim. 2 çocuğum var. Ebeveynim OnCreateView'e viewpager.setOffscreenPageLimit (0) koyduğumda. alt parça –