Fragment in TabLayout nur laden, wenn der Benutzer die Folie Android
Hallo, ich mache eine app mit Einem fragment
und wenige Kind fragment
innen mit tablayout
und viewpager
. Das problem ist, dass alle meine Kind fragment
(aus Tablayout
) immer ausführen (load all der code, Wann immer Benutzer klicken Sie auf die übergeordneten fragment
. Wie man das Kind fragment
nur laden, wenn der Benutzer die Folie (ich habe zum Beispiel 2 Registerkarte Inhalt im Register 2 nur geladen, wenn der Benutzer die Folie zu tab 2)
Hier ist meine Eltern fragment
code
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];
}
}
}
Und mein Kind fragment-code. Ich will diesen code nur ausführen, wenn der Benutzer die Folie, um das Kind tab. Jede Hilfe ist sehr dankbar, vielen Dank
@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);
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); }
- vielen Dank für die Jahre rep. Can u beschreiben, ein bisschen mehr detail. Ich brauche zu setzen, die über Kind-fragment-code auf @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); }?
- Wann wird die android-fügen Sie einfach einen Rückruf an den tabView?
Du musst angemeldet sein, um einen Kommentar abzugeben.
könnten Sie obige Methode in Ihrem fragment, das innerhalb Ihres
ViewPager
Adapter
bewusst sein, um nicht initialisieren Ansichten oder so etwas eher, init, Ihre Ansichten innerhalb
onViewCreated
und nennen Sie die Methode, die Sie wollen, führen aufsetUserVisibleHint
. ein weiterer unschöner Weise ist das hinzufügen einer scroll-listener, um IhreViewPager
und Holen Sie sich die aktuelle position und eine Aktion auszulösen, die innerhalb des fragments. um das fragment aus demViewPager
Adapter
können Sie beispielsweise :dann könnten Sie eine Methode aufrufen, die innerhalb
MyFragment
ProgressBar.setVisibility(int)
wie ich bereits erwähnte, tun initialisieren Sie Ihre Ansichten onViewCreated undsetUserVisibleHint
seines namens voronViewCreated
überprüfen, so gegen null-Zeug.Den Viewpager standardmäßig lädt das benachbarte fragment zu gewährleisten, stellen Sie die app glatt, so dass, wenn der Benutzer swipe, um die Fragmente (bereits geladen), es ist da. Zu ändern ist das Standardverhalten verwenden
viewpager.setOffscreenPageLimit(int limit)
wo die Grenze ist, wie viele fragment-neben der, die Sie auf wird vorinstalliert.Hoffe, das hilft
ViewPager
wird zum laden von Sachen außerhalb des Bildschirms, so dass Sie es bereit, wenn der Benutzer beginnt zu Blättern. Sie können dies vermeiden.