ডায়ালগফ্রেগমেন্ট সেট বাতিলযোগ্য সম্পত্তি কাজ করছে না


101

আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে কাজ করছি এবং একটি ডায়ালগ দেখানোর জন্য একটি ডায়ালগফ্রেগমেন্ট ব্যবহার করছি এবং আমি সেই ডায়ালগফ্রেগমেন্টটি বাতিলযোগ্য না করে তৈরি করতে চাই। আমি কথোপকথনটিকে বাতিল হিসাবে সম্পত্তি বাতিল করে দিয়েছি, তবে এখনও এটি প্রভাবিত করছে না।

দয়া করে আমার কোডটি দেখুন এবং আমাকে একটি সমাধান প্রস্তাব দিন।

public class DialogTest extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return super.onCreateDialog(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_test, container, true);
        getDialog().requestWindowFeature(STYLE_NO_TITLE);
        getDialog().setCancelable(false);

        return view;
    }
 }

28
getDialog () এর পরিবর্তে setCancelable (মিথ্যা); আপনি setCancelable (মিথ্যা) কল করা উচিত;
ব্ল্যাকবেল্ট

আপনি যদি ডায়লগের সীমানার বাইরে ক্লিক করেন তবে এটিও ছদ্মবেশী হতে হবে?
উসমান কুর্দ

আপনি কি আইসক্রিম স্যান্ডউইচ এ চেষ্টা করছেন? অনুগ্রহ করে উল্লিখিত ফ্যান্টাসিপব্লিশিংস
//

উত্তর:


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

    View view = inflater.inflate(R.layout.dialog_test, container, true);
    getDialog().requestWindowFeature(STYLE_NO_TITLE);
    getDialog().setCancelable(false);

    return view;
}

পরিবর্তে getDialog().setCancelable(false);আপনি সরাসরি ব্যবহার করতে হবেsetCancelable(false);

সুতরাং আপডেট করা উত্তরটি এর মতো হবে

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

    View view = inflater.inflate(R.layout.dialog_test, container, true);
    getDialog().requestWindowFeature(STYLE_NO_TITLE);
    setCancelable(false);

    return view;
}

এটি একটি সত্যিই অবিশ্বাস্য টিপ, ধন্যবাদ। আমি ভাবছি কেন, ডায়লগ.বিট উইন্ডো () দিয়ে। অনুরোধের বৈশিষ্ট্য (-) আপনাকে উইট উইন্ডোতে "সংলাপটি অন্তর্ভুক্ত করতে হবে"?
ফ্যাটি

7
এটি কোনও টিপ নয়। একটি টুকরোটি আপনার ডায়লগটি
মোড়ছে

1
আপনি যদি ক্রেইটভিউর উপরে ওভাররাইড না করেন, সেট ক্যান্সেবল (মিথ্যা) জনসাধারণের ডায়ালগ অনক্রিটডায়ালগ (বান্ডেল সেভড ইনস্ট্যান্স স্টেট) থেকেও কল করা যেতে পারে
user2924714

2
আমার জন্য কাজ করছে না। ডায়ালগটি এখনও পিছনে বোতামের ক্লিকে খারিজ হয়ে যায়।
গোলাপীশ দার্জি

@ ব্ল্যাকবেল্ট আমার অনুরূপ ব্যবহারের ঘটনা রয়েছে তবে আমার ক্ষেত্রে ডায়ালগের বাইরের একটি স্পর্শ ডায়ালগটি খারিজ করে দিচ্ছে না। আমি ডায়ালগফ্র্যাগমেন্টের মধ্যে একটি ডেটপিকার ব্যবহার করছি। আপনার উপরের উত্তরে আমি "R.layout.dialog_test" এর জন্য কী ব্যবহার করব? আমার সম্পূর্ণ প্রশ্নটি এখানে তালিকাবদ্ধ রয়েছে: stackoverflow.com/questions/59825258/…
এজেডাব্লু

51

নিম্নলিখিত স্নিপেট ব্যবহার করুন

void showDialog() {
    DialogFragment newFragment = MyAlertDialogFragment.newInstance(
            R.string..alert_dialog_two_buttons_title);
    newFragment.setCancelable(false);
    newFragment.show(getFragmentManager(), "dialog");
}

এবং আপনি যদি ডায়ালগের চারপাশে আউট সাইড টাচটি অক্ষম করতে চান তবে নিম্নলিখিত কোডের লাইনটি ব্যবহার করুন

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি ভ্যানিলা সতর্কতা সংলাপের টুকরো এবং কাস্টম সংলাপের টুকরো উভয়ের জন্যই প্রযোজ্য।
গণেশ মোহন

29

যদি আপনার সাহায্যের বিল্ড আপনার ডায়লগ সতর্ক রচয়িতা ব্যবহার করুন (এবং সম্ভবত প্রতিটি ক্ষেত্রে আপনি একটি DialogFragment ভিতরে ডায়ালগ মোড়ানো), getDialog () ব্যবহার করুন না। SetCancelable (মিথ্যা) অথবা Dialog.setCancelable (মিথ্যা) করা হয়েছে কারণ এটি চালু হচ্ছে না হবে। অ্যান্ড্রয়েড অ্যান্ড্রয়েড ডকুমেন্টেশনে যেমন উল্লেখ করা হয়েছে তেমন নীচে কোডে দেখানো হিসাবে সেটক্যান্সেবল (মিথ্যা) ব্যবহার করুন:

public void setCancelable (boolean cancelable)

এপিআই স্তরের 11-এ যুক্ত হয়েছে প্রদর্শিত ডায়ালগটি বাতিলযোগ্য কিনা তা নিয়ন্ত্রণ করুন। সরাসরি ডায়ালগ.সেটকে বাতিল (বুলিয়ান) কল করার পরিবর্তে এটি ব্যবহার করুন, কারণ ডায়ালগফ্র্যাগমেন্টের ভিত্তিতে এর আচরণ পরিবর্তন করা দরকার। "

রেফ: http://developer.android.com/references/android/app/ ডায়ালগফ্র্যাগমেন্ট html#set বাতিলকরণযোগ্য বুবুয়ান)

public class MyDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialog_layout, null, false);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
                .setTitle("in case you want use a title").setView(view);

        AlertDialog alert = builder.create();
        // alert.setCancelable(false); <-- dont' use that instead use bellow approach
        setCancelable(false); <-  press back button not cancel dialog, this one works fine
        alert.setCanceledOnTouchOutside(false); <- to cancel outside touch

        return alert;
}

হ্যাঁ আমি উপরের সমাধানটি চেষ্টা করেছিলাম, এমনকি চেক করা একটি তবে এটি আমার জন্য কাজ করে না, উত্তরটি নতুন তাই আপলোড করার জন্য সময় প্রয়োজন, যাইহোক ধন্যবাদ।
জেনিওন

তবে এটি সত্য, এমনকি যদি আমি মনে করি অ্যান্ড্রয়েডের পক্ষ থেকে এই আচরণটি বেশ অদ্ভুত, আপনি যেমন স্পষ্টভাবে উদাহরণস্বরূপ সতর্কতার সাথে ডায়ালগটি ব্যবহার করেন u তবে আমি কি এখানে কিছু মিস করছি?
রবার্ট

আমি মনে করি ডায়ালগ আচরণটি একটি কথোপকথনে আবৃত হয়ে যাওয়ার পরে আর সতর্কতা ডায়ালগের প্রতিক্রিয়া নয় বা বড়সইয়ের সময়ে লিট হয়েছে। আমি মনে করি এর পরিবর্তে সমস্তই খণ্ডটি ডায়ালগের মধ্য দিয়ে যায়।
Xenione

ধন্যবাদ! আমি এই সমস্ত সময় সতর্কতা.সেটকে বাতিল (মিথ্যা) ব্যবহার করছিলাম এবং কেন এটি কাজ করবে না বুঝতে পারি না।
অ্যালডো

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