ফ্র্যাগমেন্টের দৃশ্য অ্যাক্সেস করার সময় মাঝে মাঝে এনইপি

আমি মাঝে মাঝে <�কোড> NullPointerException ফাঁকা লিখতে পেতে। এটি যখন দীর্ঘ সময়ের জন্য পটভূমিতে ছিল তখন এটি ঘটে এবং তারপর আমি এটি খুলি এবং এই ফ্যাগমেন্টটিতে সোয়াইপ করি।

public class SummaryFragment extends Fragment implements FragmentLifecycle {

    private static final String TAG = "DTAG";
    private DateFormat dateFormatName;
    private Preference prefs;
    private List monthList;
    private TextView totalTimeFullTv;
    private TextView totalTimeNetTv;
    private TextView averageTimeTv;
    private TextView overUnderTv;
    private TextView minTimeTv;
    private TextView maxTimeTv;
    private TextView vacationsTv;
    private TextView sickTv;
    private TextView headlineTv;
    private TextView overUnderTvH;
    private OnFragmentInteractionListener mListener;

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


    public static SummaryFragment newInstance(String param1, String param2) {
        SummaryFragment fragment = new SummaryFragment();
        return fragment;
    }

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

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

        View RootView = inflater.inflate(R.layout.fragment_summary, container, false);

        dateFormatName = new SimpleDateFormat(getResources().getString(R.string.month_text));
        monthList = Arrays.asList(new DateFormatSymbols().getMonths());
        prefs = new Preference(GeneralAdapter.getContext());


        totalTimeFullTv = RootView.findViewById(R.id.textView_sum_ttf);
        totalTimeNetTv = RootView.findViewById(R.id.textView_sum_ttn);
        averageTimeTv = RootView.findViewById(R.id.textView_sum_av);
        overUnderTv = RootView.findViewById(R.id.textView_sum_ou);
        overUnderTvH = RootView.findViewById(R.id.textView_sum_ou_h);


        minTimeTv = RootView.findViewById(R.id.textView_sum_min);
        maxTimeTv = RootView.findViewById(R.id.textView_sum_max);
        vacationsTv = RootView.findViewById(R.id.textView_sum_vac);
        sickTv = RootView.findViewById(R.id.textView_sum_sick);
        headlineTv= RootView.findViewById(R.id.textView_sum_headline);

        return RootView;
    }

    private void refreshData() {

        if (prefs == null)
        {
            prefs = new Preference(GeneralAdapter.getContext());
        }

        String month = prefs.getString(Preference.CURRENT_MONTH);

        MonthData monthData = Calculators.CalculateLocalData(MainActivity.db.getAllDays(month));

        totalTimeFullTv.setText(monthData.getTotalTimeFull()); //Crash here
        totalTimeNetTv.setText(monthData.getTotalTimeNet());
        averageTimeTv.setText(monthData.getAverageTime());
        overUnderTv.setText(monthData.getOverUnder());
        if (monthData.getOverUnderFloat()<0)
        {
            overUnderTvH.setText(R.string.sum_over_time_neg);
            overUnderTv.setTextColor(ContextCompat.getColor(GeneralAdapter.getContext(),R.color.negative_color));
        }
        else
        {
            overUnderTvH.setText(R.string.sum_over_time_pos);
            overUnderTv.setTextColor(ContextCompat.getColor(GeneralAdapter.getContext(),R.color.positive_color));
        }

        minTimeTv.setText(monthData.getMinTime());
        maxTimeTv.setText(monthData.getMaxTime());
        vacationsTv.setText(""+monthData.getVacations());
        sickTv.setText(""+monthData.getSick());
        headlineTv.setText(month);
    }

    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttachFragment(Fragment childFragment) {
        super.onAttachFragment(childFragment);

    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onPauseFragment() {

    }

    @Override
    public void onResumeFragment()
    {
        refreshData();
    }


    public interface OnFragmentInteractionListener {
       //TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

মুখ্য অ্যাক্টিভিটি ভিউপাগার:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            int currentPosition = 0;

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {

                FragmentLifecycle fragmentToHide = (FragmentLifecycle) adapter.getItem(currentPosition);
                fragmentToHide.onPauseFragment();

                FragmentLifecycle fragmentToShow = (FragmentLifecycle) adapter.getItem(position);
                fragmentToShow.onResumeFragment(); //Crash start

                currentPosition = position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

এ লগইন করুন:

                                            E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: michlind.com.workcalendar, PID: 25038
                                               java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
                                                   at michlind.com.workcalendar.mainfragments.SummaryFragment.refreshData(SummaryFragment.java:99)
                                                   at michlind.com.workcalendar.mainfragments.SummaryFragment.onResumeFragment(SummaryFragment.java:147)
                                                   at michlind.com.workcalendar.activities.MainActivity.onPageSelected(MainActivity.java:84)
                                                   at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1941)
                                                   at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:680)
                                                   at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:664)
                                                   at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2257)
                                                   at android.view.View.dispatchTouchEvent(View.java:11776)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2962)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2643)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2968)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2657)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2968)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2657)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2968)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2657)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2968)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2657)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2968)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2657)
                                                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2968)
                                                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2657)
                                                   at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:448)
                                                   at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1829)
                                                   at android.app.Activity.dispatchTouchEvent(Activity.java:3307)
                                                   at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
                                                   at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:410)
                                                   at android.view.View.dispatchPointerEvent(View.java:12015)
                                                   at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4795)
                                                   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4609)
                                                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147)
                                                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200)
                                                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166)
                                                   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4293)
                                                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174)
                                                   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4350)
                                                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147)
                                                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200)
                                                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166)
                                                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174)
                                                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147)
                                                   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6661)
                                                   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6635)
                                                   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6596)
                                                   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6764)
                                                   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
                                                   at android.os.MessageQueue.nativePollOnce(Native Method)
                                                   at android.os.MessageQueue.next(MessageQueue.java:325)
                                                   at android.os.Looper.loop(Looper.java:142)
                                                   at android.app.ActivityThread.main(ActivityThread.java:6494)

এ আপডেট:

আমি অবশেষে ব্যবহৃত:

@Override
public void onPageSelected(int position) {

    Fragment fragment = adapter.getFragment(position);
    if (fragment != null) {
        fragment.onResume();
    }
}

At my MainActivity, and used onResume() at each fragment. And this solution for the adapter: http://thedeveloperworldisyours.com/android/update-fragment-viewpager/

11
10 দিয়ে চেষ্টা করা হয়েছে, অনেক ভাল পেতে বলে মনে হচ্ছে, কিন্তু এখনও কিছু বার ক্র্যাশ। নই 500 দিয়ে চেষ্টা! কিন্তু এটা সঠিক সমাধান মনে হচ্ছে না। শুধু একটি workaround।
যোগ লেখক Dim, উৎস
@ ভিএম 345 যদি অপারেটিং সিস্টেম অপারেটিং সিস্টেম ব্যবহার করে, কাস্টিং প্রয়োজন হয় না। অ্যান্ড্রয়েডের পরবর্তী সংস্করণে একটি নতুন সংস্করণটি টুকরো টুকরা এবং ক্রিয়াকলাপে অ্যাংক্রোম্যাট দ্বারা মাপসই করা হয়েছিল, অ্যাপপম্পট আমদানিগুলি ব্যবহার করার সময় ঢালাই অকার্যকর করা হয়েছিল।
যোগ লেখক Zoe, উৎস
প্রশ্ন তে যোগ করার পরিবর্তে আপনার "আপডেট" ভাল একটি পৃথক উত্তর নয়?
যোগ লেখক usr2564301, উৎস
আপনি আপনার onResumeFragment() এর মধ্যে 50-100 মিঃ দ্বারা বিলম্ব করার চেষ্টা করেছিলেন?
যোগ লেখক nimi0112, উৎস
এই ধরণের পরিস্থিতিতে এড়াতে আপনাকে onrefact() পদ্ধতিতে রিফ্রেশডাটা() রাখতে হবে। আপনার মতামত তৈরি করা হয় না।
যোগ লেখক Stanojkovic, উৎস
কেন আপনি টেক্সট কোড হিসাবে totalTimeFullTv কেটে নিচ্ছেন না
যোগ লেখক vm345, উৎস

10 উত্তর

সমস্যা হল, আপনি খুব দ্রুত দৃশ্যগুলিতে অ্যাক্সেস করার চেষ্টা করছেন: অনুক্রমটি এখনও সেই সময়ে তৈরি করা হয়নি।

যদি আপনি কোনও ইভেন্ট পোস্ট করেন তবে এটি পরবর্তী ফ্রেমে স্থানান্তরিত হবে, আপনি নিশ্চিত হবেন যে দৃশ্য অনুক্রমটি ইতিমধ্যে সেটআপ করা হবে:

@Override
public void onResumeFragment() {
    new Handler().post(new Runnable() {
        @Override
        public void run() {
            refreshData();
        }
    });
}
3
যোগ
এটি নাটকীয়ভাবে ক্র্যাশ হ্রাস, কিন্তু তারা এখনও এক সময় ঘটতে ...
যোগ লেখক Dim, উৎস
এখনও কখনও কখনও ঘটছে। বর্তমানে 500 মিমি দিয়ে চেষ্টা করছেন! কিন্তু এটি সঠিক কোডিং সমাধান মনে হচ্ছে না। আমার লগ ইন আমি দেখতে পারি যে OnCreate নিশ্চিত করার জন্য ResumeFragment আগে ঘটে। OnCreate একটি দৃশ্য নিল না। এই খুব অদ্ভুত।
যোগ লেখক Dim, উৎস
হ্যাঁ, একই জিনিস ঘটবে
যোগ লেখক Dim, উৎস
@ জর্দাহভেলিক এছাড়াও, ইভেন্ট বাসের ব্যবহারটি এমন সিদ্ধান্ত নয় যা কৌশল সম্পর্কিত বিভিন্ন মতামতের কারণে সহজেই প্রয়োগ করা যেতে পারে।
যোগ লেখক azizbekian, উৎস
@ জর্দাভাভেলিক <�কোড> যথাযথ সাবস্ক্রাইব এর অর্থ হল এটি সাবস্ক্রাইব করা হয়েছে। inViewCreated() সেই সময়ে যখন onPageSelected() বলা হয় তখন আপনাকে এখনো Fragment # onViewCreated() বলা হয় না, যার মানে আপনি ইভেন্ট মিস করবেন। আপনি দাবি করতে পারেন যে, sticky সাবস্ক্রিপশনের ব্যবহার করা উচিত, যার অর্থ হল, আপনি অভিযোজন পরিবর্তনের পরেও ইভেন্টের বিষয়েও যত্ন নেবেন না, কারণ onViewCreated() হবে আবার বলা হবে এবং ঘটনা আবার গ্রহণ করা হবে।
যোগ লেখক azizbekian, উৎস
@ জর্দাভাভেলিক, এই সমাধানটি মূলত প্রত্যাশা করছে যে কিছু নির্দিষ্ট সময়ের মধ্যে দৃশ্যটি তৈরি করা হবে সঠিকভাবে নয়, এই সমাধানটি প্রত্যাশা করছে যে দৃশ্যটি পরবর্তী ফ্রেমে তৈরি হবে যা কাঠামো নকশা দ্বারা, যে সময় দ্বারা করা উচিত ছিল। আপনি আমার উপরের উল্লিখিত বিবৃতি জন্য একটি counterargument প্রদান করতে পারেন? যদি আপনি নেটিভ অন রিসিউম ব্যবহার পছন্দ করেন না চটকদারতা কোন ব্যাপার না। আমি দাবি করি যে onResume() পদ্ধতি ত্রুটিযুক্ত এবং আমি কেন ব্যাখ্যা করছি, কেন আমি না শুধু বলি "আমি সেই পদ্ধতিটি পছন্দ করি না"
যোগ লেখক azizbekian, উৎস
@ জর্দাভাভেলিক, <�কোড> এটি কোনও ভাল সমাধান নয় দয়া করে ব্যাখ্যা করুন কেন। আপনি নেটিভ অন রেসিউম() পদ্ধতিটি ব্যবহার করেন না কেন? কারণ onResume যে কোনও সময় ব্যবহারকারীকে হোম বোতামটি ব্যবহার করে অ্যাপ্লিকেশনটি কমিয়ে দেয় এবং পুনঃসূচনা অ্যাপ্লিকেশন তালিকা থেকে অ্যাপ্লিকেশনটি খোলে, যখন OP চান ব্যবহারকারী একটি পৃষ্ঠা নির্বাচন করে একটি কর্ম সঞ্চালন। এই উত্তরটিকে সঠিক হিসাবে গ্রহণ করা উচিত নয় অনুগ্রহ করে আপনার মতামতটি স্পষ্ট করুন।
যোগ লেখক azizbekian, উৎস
@ আবদুল ওয়াসে, এটি মূলত প্রত্যাশা করছে যে নির্দিষ্ট পরিমাণ মিলেসেকেন্ড পরে পৃষ্ঠাটি সেট করা হয়েছে উত্তরটিতে কিছু নেই যা কয়েক মিলিসেকেন্ডে নির্ভর করে, তাই আপনার বিবৃতিটি অবৈধ।
যোগ লেখক azizbekian, উৎস
ব্যতিক্রম বার্তা ঠিক একই?
যোগ লেখক azizbekian, উৎস
পোস্ট() এর পরিবর্তে, কিছু ছোট মান সহ পোস্টডেলয়েড() চেষ্টা করুন, যেমন, 10ms।
যোগ লেখক azizbekian, উৎস
এই প্রস্তাবিত সমাধান হয় না। এটি মূলত প্রত্যাশা করে যে পৃষ্ঠাটি মিলিসেকেন্ডগুলির একটি সেট পরিমাণের পরে সেট করা হয়েছিল। এই ক্ষেত্রে কিছু ক্ষেত্রে 'খুব শীঘ্রই' হতে পারে, পাশাপাশি অন্যান্য ক্ষেত্রে 'অপ্রয়োজনীয়ভাবে বিলম্বিত' হতে পারে।
যোগ লেখক Abdul Wasae, উৎস
এটি ভাল সমাধান নয়, কেন আপনি নেটিভ অন রিসিউম() পদ্ধতি ব্যবহার করেন না? আপনাকে এটি নিজের কাছে কল করতে হবে না Android এটি আপনার জন্য কল করবে এবং শুধুমাত্র যখন দর্শন তৈরি হবে, তখন এই উত্তরটিকে সঠিক হিসাবে গ্রহণ করা উচিত নয়
যোগ লেখক Jarda Havelik, উৎস
@azizbekian এই সমাধান মূলত আশা করা হচ্ছে যে কিছু নির্দিষ্ট সময়ে দৃশ্য তৈরি করা হবে, এটি সমস্ত ডিভাইসের জন্য সর্বজনীন সমাধান নয় - কিছু ক্ষেত্রেই তা হ্রাস পাবে। এটি করার আরেকটি উপায় (যদি আপনি নেটিভ অন রিসিউমের ব্যবহার পছন্দ না করেন) তবে কোনও ইভেন্ট বাস ব্যবহার করতে হবে (সমস্ত সঠিক সাবস্ক্রাইবযুক্ত টুকরাগুলিতে ইভেন্ট প্রেরণ করুন)। সঠিকভাবে সাবস্ক্রাইব মানে এটি সাবস্ক্রাইব করা হয়েছে। inViewCreated() পদ্ধতিতে এবং odDestroyView() পদ্ধতিতে সদস্যতামুক্ত
যোগ লেখক Jarda Havelik, উৎস

আপনাকে onCreateView এ আপনার লেআউটটি ফুটে উঠতে হবে তবে findViewById ব্যবহার করে onCreateView তে অন্যান্য দৃশ্যগুলি সূচনা করা উচিত নয়।

এখানে FragmentManager থেকে একটি কোড

 //This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);

// Null check avoids possible NPEs in onViewCreated
// It's also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
    f.mView.setSaveFromParentEnabled(false);
    if (f.mHidden) f.mView.setVisibility(View.GONE);
    f.onViewCreated(f.mView, f.mSavedFragmentState);
}

onViewCreated এ ক্ষেত্রগুলিতে সাবউইউগুলির যে কোনও অ্যাসাইনমেন্ট করা ভাল। ফ্রেমওয়ার্কটি আপনার ফ্র্যাগমেন্টের দৃশ্যের অনুক্রম তৈরি করা হয়েছে এবং প্রসারণ করা হয়েছে (যদি একটি এক্সএমএল লেআউট ফাইল ব্যবহার করে) সঠিকভাবে নিশ্চিত করার জন্য ফ্রেমওয়ার্ক একটি স্বয়ংক্রিয় নাল চেক করে।

একবার দৃশ্য তৈরি হলে আপনার মতামত আরম্ভ করুন।

1
যোগ
এই দুটি পদ্ধতি একে অপরের পরে অবিলম্বে বলা হয় এবং getView() কে onCreateView() সময় বলা হয় না। এটা অন্য কোথাও বিপর্যস্ত।
যোগ লেখক Eugen Pechanec, উৎস

রিফ্রেশডটা() পদ্ধতিতে এই চেক যুক্ত করুন:

if (isAdded() && getActivity() != null)
1
যোগ

ভিউপাগারের জন্য কাস্টম লাইফ চক্র বাস্তবায়িত করার সময় আমিও একই সমস্যার মুখোমুখি হলাম। আপনি ViewPager সঙ্গে টুকরা ভরাট FragmentStatePager অ্যাডাপ্টার ব্যবহার করছেন মনে হয়। আমরা FragmentStatePagerAdapter হিসাবে ফোকাস হারান যখন সব টুকরা ধ্বংস করে জানি। সিঙ্গল্টন প্যাটার্ন ব্যবহার করে আমাদের প্রতিটি পৃষ্ঠার জন্য একই জিনিস সরবরাহ করতে হবে।

আপনার কোড তে, ভগ্নাংশ সৃষ্টি একক্টন প্যাটার্নের জন্য নীচের মত হতে পারে।

private SummaryFragment mInstance;

private SummaryFragment() {
       //Required empty public constructor
    }

public static SummaryFragment newInstance(String param1, String param2) {
        if(mInstance == null)
        mInstance = new SummaryFragment();
        return mInstance;
    }

এই কাজ আমার সমস্যা সমাধান করেছে। যদি এটা আপনার জন্য কাজ করে না? আপনি আপনার পেজার অ্যাডাপ্টার ক্লাস শেয়ার করতে পারেন।

1
যোগ

ViewPager keeps several items on either side attached (i.e. fragments resumed), however FragmentPagerAdapter uses Fragment.setUserVisibleHint to indicate, which item is current. Leverage that instead.

ব্যবহারকারী দৃশ্যমান ইঙ্গিত লিভারেজ করতে কি এখানে আছে:

  1. OnPageChangeListener সরান।
  2. FragmentLifecycle ইন্টারফেসটি খালি করুন।
  3. আপনার টুকরাটি এভাবে সেট করুন:

(কোটলিনে, কিন্তু আপনি গালি পাবেন)

override fun setUserVisibleHint(isVisibleToUser: Boolean) {
    super.setUserVisibleHint(isVisibleToUser)

    if (isVisibleToUser && isResumed) {
       //Do stuff.
    }
}

override fun onResume() {
    super.onResume()

    if (userVisibleHint) {
       //Do the same stuff.
    }
}

অধিক তথ্য

FragmentPagerAdapter.getItem is a factory method. It's always supposed to return you a new instance of a fragment. If you tried to cache them, remove the cache (1) and don't use getItem yourself (2).

  1. কোড কখনও কখনও ক্র্যাশ এবং কখনও কখনও এটি একটি ডি **** ডিবাগ হয় না। আপনি যখন ভাবেন না তখন এটি টুকরা পুনঃব্যবহারের কারণে হতে পারে।
  2. একটি নতুন টুকরা উদাহরণ সংযুক্ত করা হয় না, দর্শনগুলি তৈরি করার কোন কারণ নেই এবং আপনি onPageSlected ছেড়ে গেলে একবার আবর্জনা সংগ্রহ করা হবে।
0
যোগ

এ সমস্যা

একটি ফ্র্যাগমেন্ট এর জীবনচক্র স্বাধীন। আপনি নিশ্চিত হতে পারবেন না যে যখন onPageSelected() নিবন্ধিত হয়, তখন সেই খণ্ডটি ইতিমধ্যেই পেশ করা হয়েছে। এটি একটি অ্যাসিঙ্ক্রোনাস ইভেন্ট। সুতরাং আপনি এই কলব্যাক উপর নির্ভর করতে পারবেন না।

কিন্তু অন্যদিকে, আপনি কেবলমাত্র onResume() তে নির্ভর করতে পারবেন না, যেহেতু একটি ভিউপ্যাজারে, বর্তমানে দৃশ্যমান পৃষ্ঠাটির পাশে থাকা পৃষ্ঠাগুলি প্রিলোড করা হয়েছে।

এ সমাধান

মূলত আপনাকে রিফ্রেশডাটা() প্রয়োজন হবে যখন টুকরা ব্যবহারকারীর কাছে দৃশ্যমান এবং সক্রিয়ভাবে চলমান। onResume() এর সংজ্ঞা একই বলে:

যখন ব্যবহারকারীর কাছে টুকরা দৃশ্যমান এবং সক্রিয়ভাবে চলমান হয় তখন কল করা হয়। (...)?

তাই কেবল আপনার কোডের onResume()রিফ্রেশডাতা() কল করুন, এবং যদি আপনি এই কলটি দেখছেন বলে মনে করেন তবে চিন্তা করবেন না, যখন ViewPager সত্যিই এই পৃষ্ঠাটি দেখায়নি ।

0
যোগ
হ্যাঁ, কিন্তু আমি প্রতিটি সময় টুকরা দেখানো রিফ্রেশ করতে চান
যোগ লেখক Dim, উৎস
আমি অবশেষে অনুরূপ সমাধান ব্যবহার করেছি, কিন্তু OnResume() টুকরাটি চলমান কার্যকলাপ থেকে সুপার, এবং ভিউ দেখানো প্রতিটি সময় ট্রিগার হয় না।
যোগ লেখক Dim, উৎস
@ জর্দাভাভেলিক এটি ব্যবহার ক্ষেত্রে সম্পূর্ণ নয়, যেটি OP আছে, কারণ onResume() যেকোনো সময় ব্যবহারকারীকে হোম বোতামটি ব্যবহার করে অ্যাপ্লিকেশনটি কমিয়ে আনা হবে এবং অ্যাপ্লিকেশানে নেভিগেট করবে, তবে OP কে রিফ্রেশ ডেটাতে প্রয়োজন হবে() শুধুমাত্র পৃষ্ঠা নির্বাচন করা হয়। সুতরাং, এই একটি বৈধ উত্তর হিসাবে বিবেচনা করা যাবে না।
যোগ লেখক azizbekian, উৎস
দৃশ্যটি প্রদর্শিত হওয়ার সময় এটি ট্রিগার হয় না কারণ আপনার ভিউগারটি সংলগ্ন পৃষ্ঠা দেখানোর সময় এটি ইতিমধ্যে পুনরায় চালু করা হয়েছে। এই স্বাভাবিক.
যোগ লেখক Abdul Wasae, উৎস
এইভাবে ভেবে দেখুন। একটি পাতার জন্য, সর্বদা 3 টি দৃশ্যমান টুকরা রয়েছে: বর্তমান এক, অবিলম্বে বাম এক, অবিলম্বে ডান এক। যাইহোক, যদি আপনি এখনও এটি একটি বর্বর বাহিনীতে করতে চান তবে আপনি এই কোডটি রিফ্রেশডাতা : এটিকে (এই। অদৃশ্য) {// অবিরত চলুন} রাখতে পারেন।
যোগ লেখক Abdul Wasae, উৎস
এই গ্রহণযোগ্য উত্তর হিসেবে চিহ্নিত করা উচিত
যোগ লেখক Jarda Havelik, উৎস

onViewCreated() আপনার ডেটা আপডেট করার জন্য ফ্র্যাগমেন্টের কলব্যাক পদ্ধতিটি ব্যবহার করুন যাতে আপনি নিশ্চিত হন যে আপনার সমস্ত মতামত সম্পূর্ণরূপে পেশ করা হয়েছে।

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
   refreshData();

}

হ্যান্ডলার ব্যবহার করে এখনও ঝুঁকিপূর্ণ হতে পারে কারণ দৃশ্যটি ফুটে উঠেছে কিনা তা নিশ্চিত করা যাবে না।

0
যোগ

বেশীরভাগ লোকের মতই আপনি আপনার টুকরাটি সক্রিয় এবং ব্যবহারকারীর কাছে দৃশ্যমান তা নিশ্চিত করার প্রয়োজন। আমারও একই সমস্যা ছিল. আমি তথ্য পুনঃলোড করার সিদ্ধান্ত নিয়েছে হুইডChanged ব্যবহৃত।

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (!hidden) {
        refreshData();
    }
}
0
যোগ

আপনি OnPageChangeListener ভুলভাবে ব্যবহার করছেন। এটি দেখুন জীবনযাত্রার ঘটনা নিয়ন্ত্রণ করার জন্য একটি নিরাপদ উপায় নয়। ViewPager এর সাহায্যে আপনাকে PagerAdapter ব্যবহার করতে হবে এবং তার তাত্ক্ষণিক আইটি/ডেটা আইটি কলব্যাকগুলি ওভাররাইড করতে হবে।

See this example: http://android-er.blogspot.com/2014/04/example-of-viewpager-with-custom.html

প্যাজার অ্যাডাপ্টারটি কি ListAdapter ListView এর ViewPager দেখার জন্য, আপনার সিস্টেমটি সঠিকভাবে কাজ করতে উভয়ই প্রয়োজন।

0
যোগ

onResumeFragment() is getting invoked before the creation of all the views of this fragment. Try recreating newInstance first and then invoke onResumeFragment of FragmentLifeCycle interface in your Activity.

0
যোগ