একটি লোডিং / অগ্রগতি সূচক দেখানোর সর্বোত্তম উপায়?


146

অ্যাপ্লিকেশনটি সার্ভারের কাছ থেকে সাড়া পাওয়ার অপেক্ষায় থাকা অবস্থায় কোনও লোডিং স্পিনার দেখানোর সর্বোত্তম উপায় কী?

এটি কি প্রোগ্রামগতভাবে করা যায়? যাতে আমাকে এক্সএমএল ফাইলটিতে লোড স্পিনার যোগ করতে হবে না?

উত্তর:


293

প্রগ্রেসডায়ালগ অ্যান্ড্রয়েড ওরিও থেকে প্রত্যাখ্যান করা হয়। ব্যবহারের ProgressBar পরিবর্তে

ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();

অথবা

ProgressDialog.show(this, "Loading", "Wait while loading...");

এখানে আরও পড়ুন।

যাইহোক, অ্যান্ড্রয়েডে স্পিনারের আলাদা অর্থ রয়েছে। (এটি HTML এ সিলেক্ট ড্রপডাউন এর মতো)


1
অ্যান্ড্রয়েড বিকাশকারী ওয়েবসাইট থেকে: STYLE_SPINNER একটি বিজ্ঞপ্তি, স্পিনিং প্রগতি বারের সাহায্যে একটি অগ্রগতি ডায়ালগ তৈরি করে।
টকিলাম্যান

34
এটি কাজ করে, তবে যখন আমি এটি পরীক্ষা করে দেখি তখন ডায়ালগটি এর বাইরের স্ক্রিনটি স্পর্শ করে বা পিছনে বোতামটি টিপে বরখাস্ত করতে পারি । আমি একটি কল যোগ করে এটি ঠিক করেছি progress.setCancelable(false);
স্যাম

1
নীচের মন্তব্যের জন্য ধন্যবাদ। আমি পাগল হয়ে যাচ্ছিলাম কারণ আমি 'স্পিনার' এক ঘন্টা কাজ করার চেষ্টা করছিলাম।
পোয়েরাজোয়েলু

চমত্কার, এখন আমি অগ্রগতি কথোপকথনটি ব্যবহার করতে পারি
ফয়সাল

10
ProgressDialogঅ্যান্ড্রয়েড ও ডেভেলপার.অ্যান্ড্রয়েড
রেফারেন্স /

17

প্রগ্রেসডায়ালগ এপিআই স্তরের ২ htt https://developer.android.com/references/android/app/ProgressDialog.html থেকে অবহেলিত হয়েছে

আমি আমার লেআউটে একটি প্রগতিবার অন্তর্ভুক্ত করেছি

   <ProgressBar
        android:layout_weight="1"
        android:id="@+id/progressBar_cyclic"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="40dp"
        android:minWidth="40dp" />

এবং এর দৃশ্যমানতা .GONE | এ পরিবর্তন করুন .ভিত্তিক ব্যবহারের ক্ষেত্রে নির্ভর করে।

    progressBar_cyclic.visibility = View.VISIBLE

নিশ্চিত নয়, তবে কি অগ্রগতি বারটি অদৃশ্য হওয়ার পরে পটভূমিতে সর্বদা চলবে (কেবলমাত্র ইউআই থেকে লুকানো থাকবে)?
শম্ভু

16

ব্যবহার ProgressDialog

ProgressDialog.show(Context context, CharSequence title, CharSequence message);

এখানে চিত্র বর্ণনা লিখুন

তবে এটি আজ একটি বিরোধী নিদর্শন হিসাবে বিবেচিত হয় (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I


12
@artworkad シ সুতরাং এর কোন দিকটি খারাপ হিসাবে বিবেচিত হয় - গৃহীত উত্তরটি কি একই অ্যান্টি-প্যাটার্নের উদাহরণ? এবং পরিবর্তে কি করার সুপারিশ করা হয়? একাধিক ইউএক্স সমস্যা সম্পর্কিত কোনও অফসাইট ভিডিওর সাথে লিঙ্ক করা এই উত্তরটির সত্যিকারের উন্নতি করে না।
LarsH

2
ProgressDialogঅ্যান্ড্রয়েড ও ডেভেলপার.অ্যান্ড্রয়েড
রেফারেন্স /

9

আসলে আপনি যদি কোনও সার্ভারের প্রতিক্রিয়াটির অপেক্ষায় থাকেন তবে এটি প্রোগ্রামক্রমে করা উচিত । আপনি একটি অগ্রগতি ডায়ালগ তৈরি করতে পারেন এবং এটিকে বরখাস্ত করতে পারেন, তবে তারপরে আবার এটি "অ্যান্ড্রয়েডের উপায়" নয়।

বর্তমানে প্রস্তাবিত পদ্ধতিটি হ'ল ডায়ালগফ্রেগমেন্ট ব্যবহার করা :

public class MySpinnerDialog extends DialogFragment {

    public MySpinnerDialog() {
        // use empty constructors. If something is needed use onCreate's
    }

    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {

        _dialog = new ProgressDialog(getActivity());
        this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
        _dialog.setMessage("Spinning.."); // set your messages if not inflated from XML

        _dialog.setCancelable(false);  

        return _dialog;
    }
}

তারপর আপনার কার্যকলাপের আপনি আপনার অসম্পূর্ণ অংশ ম্যানেজার সেট এবং দেন একবার সার্ভার শুরু জন্য অপেক্ষা ডায়ালগ:

FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");

একবার আপনার সার্ভার সম্পূর্ণ প্রতিক্রিয়া জানালে আপনি এটিকে বরখাস্ত করবেন:

myInstance.dismiss()

মনে রাখবেন যে প্রগতি ডায়ালগ হ'ল স্পিনার বা বৈশিষ্ট্যগুলির উপর নির্ভর করে একটি প্রগতিবার, এপিআই গাইডটিতে আরও পড়ুন


অগ্রগতি ডায়ালগ.শো (প্রসঙ্গে প্রসঙ্গ, চার সেকেন্ডেন্সের শিরোনাম, চার সিকোয়েন্স বার্তা); খালি স্ট্রিং হিসাবে শিরোনামের প্যারামিটারটি শিরোনামটি সরিয়ে দেয়: প্রগতিডায়ালগ.শো (প্রসঙ্গ, "", "লোডিং ..");
রাজেন্দ্র

1
দুর্দান্ত উদাহরণ, যদিও আমার পক্ষে ব্যাক বোতামটি ব্যবহার করা এখনও সম্ভব ছিল। আমি মনে করি এটি আপনার পরিবর্তনশীল dlgAlert এর কারণেই হয়েছে (এবং এটি বিটিডব্লিউ থেকে আসে কোথায়? :))। যাইহোক - যেহেতু আপনি ডায়ালগফ্র্যাগমেন্টটি প্রসারিত করছেন, আপনি কেবল সেটক্যান্সেবলকে (মিথ্যা) কল করতে পারেন এবং এটি কার্যকর হবে।
লাসে

যখন সার্ভারের প্রতিক্রিয়া ফিরে আসে তখন একটি নির্বিচারবাদী সময়ে খণ্ডের লেনদেন সম্পাদন করা বোকা-প্রমাণ বলে মনে হয় না। উদাহরণস্বরূপ, যখন প্রতিক্রিয়া ফিরে আসে, খণ্ডটি হোস্ট করে এমন ক্রিয়াকলাপটি ভুল অবস্থায় থাকতে পারে। কোন সমাধান?
জোনাস

নিশ্চিত করুন আপনি android.support.v4.app.DialogFragment এবং android.app.DialogFragment আমদানি করছি, অথবা আপনি getSupportFragmentManager (দেখুন ব্যবহার করতে পারবেন না stackoverflow.com/questions/27514338/... )
StCleezy


6

আমি এটি এইভাবে করেছিলাম যাতে একবারে কেবলমাত্র একটি অগ্রগতি ডায়ালগ খোলা যায়। সুরজ বাজাজের উত্তর অফ করা হয়েছে

private ProgressDialog progress;



public void showLoadingDialog() {

    if (progress == null) {
        progress = new ProgressDialog(this);
        progress.setTitle(getString(R.string.loading_title));
        progress.setMessage(getString(R.string.loading_message));
    }
    progress.show();
}

public void dismissLoadingDialog() {

    if (progress != null && progress.isShowing()) {
        progress.dismiss();
    }
}

আমারও ব্যবহার করতে হয়েছিল

protected void onResume() {
    dismissLoadingDialog();
    super.onResume();
}

1
ProgressDialogঅ্যান্ড্রয়েড ও ডেভেলপার.অ্যান্ড্রয়েড
রেফারেন্স /
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.