android टैबलेट में फ्रेगमेंट केवल उपयोगकर्ता स्लाइड एंड्रॉइड पर लोड होता है




android-fragments android-viewpager (2)

@Override public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
}

आप अपने विखंडन के भीतर उपरोक्त विधि का उपयोग कर सकते हैं जो कि आपके ViewPager Adapter भीतर है

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

विचारों को onViewCreated न करें या फिर कुछ भी न करें, अपने विचारों को onViewCreated करें और उस विधि को कॉल करें जिसे आप setUserVisibleHint पर निष्पादित करना चाहते हैं। एक और बुरी तरह से अपने ViewPager लिए एक स्क्रॉल श्रोता को जोड़ने और वर्तमान आइटम की स्थिति प्राप्त करने और ViewPager भीतर की एक कार्रवाई को ट्रिगर करना है। ViewPager Adapter से टुकड़ा प्राप्त करने के लिए आप ऐसा कर सकते हैं:

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

तो आप एक ऐसी विधि को कॉल कर सकते हैं जो कि MyFragment भीतर है

नमस्ते मैं tablayout और tablayout का उपयोग करके एक fragment और कुछ बच्चे के fragment साथ एक ऐप बना रहा हूं। समस्या यह है कि मेरा बच्चा fragment ( Tablayout ) हमेशा निष्पादित होता है (जब भी उपयोगकर्ता माता-पिता के fragment क्लिक करता है, तब तक सभी कोड लोड करें। जब भी उपयोगकर्ता को उस स्लाइड पर ले जाया जाता है (उदाहरण के लिए मेरे पास 2 टैब, सामग्री टैब 2 में केवल उपयोगकर्ता टैब 2 टैब पर लोड होता है)

यहां मेरा मूल fragment कोड है

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];
        }

    }

}

और मेरे बच्चे का टुकड़ा कोड मैं चाहता हूं कि यह कोड केवल तब ही निष्पादित करे जब बच्चे टैब पर उपयोगकर्ता स्लाइड आ जाए। कोई मदद बहुत सराहना करते हैं, धन्यवाद

@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);

व्यूपेगर डिफ़ॉल्ट रूप से आसन्न टुकड़ा को लोड करता है जिससे यह सुनिश्चित होता है कि ऐप को चिकना बना दिया जाए, ताकि उपयोगकर्ता जब भी टुकड़े (पहले से ही भरी हुई) को स्वाइप करे, तो वह वहां है। बदलने के लिए डिफ़ॉल्ट व्यवहार है, viewpager.setOffscreenPageLimit(int limit) उपयोग करें जहां सीमा है कि आप जिस किसी पर हैं उसके आगे अग्रिम होगा। उम्मीद है की यह मदद करेगा







android-tablayout