প্রসঙ্গ হিসাবে getApplication () সহ "উইন্ডো - টোকেন নাল কোনও অ্যাপ্লিকেশনের জন্য যুক্ত করা যায় না" ডায়ালগ নিক্ষেপ করা হচ্ছে


665

আমার ক্রিয়াকলাপটি একটি সতর্কতা ডায়ালগ তৈরি করার চেষ্টা করছে যার জন্য পরামিতি হিসাবে একটি প্রবন্ধের প্রয়োজন। আমি যদি ব্যবহার করি তবে এটি প্রত্যাশার মতো কাজ করে:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

তবে ক্রিয়াকলাপের মতো ঘোরানোর মতো কার্যকলাপের পরেও যখন কার্যকলাপটি নষ্ট হয়ে যায় এবং পুনরায় তৈরি করা হয় তখন মেমরি ফাঁস হওয়ার সম্ভাবনার কারণে আমি "এটি" প্রসঙ্গ হিসাবে ব্যবহারের উদ্রেক করি। অ্যান্ড্রয়েড বিকাশকারী এর ব্লগে সম্পর্কিত পোস্ট থেকে :

প্রসঙ্গ-সম্পর্কিত মেমরি ফুটো এড়ানোর জন্য দুটি সহজ উপায় রয়েছে। সর্বাধিক সুস্পষ্ট একটি হ'ল তার নিজস্ব ক্ষেত্রের বাইরে প্রসঙ্গটি এড়িয়ে যাওয়া। উপরের উদাহরণটি স্থিতিশীল রেফারেন্সের ক্ষেত্রে দেখিয়েছে তবে অভ্যন্তরীণ শ্রেণিগুলি এবং বাইরের শ্রেণীর সাথে তাদের অন্তর্নিহিত রেফারেন্সটিও সমান বিপজ্জনক হতে পারে। দ্বিতীয় সমাধানটি হ'ল অ্যাপ্লিকেশন প্রসঙ্গটি ব্যবহার করা। আপনার অ্যাপ্লিকেশন জীবিত থাকাকালীন এই প্রসঙ্গটি বেঁচে থাকবে এবং ক্রিয়াকলাপের জীবনচক্রের উপর নির্ভর করে না। যদি আপনি দীর্ঘমেয়াদী অবজেক্টগুলি রাখার পরিকল্পনা করেন যা একটি প্রসঙ্গে প্রয়োজন, অ্যাপ্লিকেশন অবজেক্টটি মনে রাখবেন। আপনি Context.get ApplicationContext () বা Activity.get অ্যাপ্লিকেশন () এ কল করে সহজেই এটি অর্জন করতে পারেন।

তবে AlertDialog()উভয়টির জন্য getApplicationContext()বা getApplication()প্রসঙ্গ হিসাবে গ্রহণযোগ্য নয় , কারণ এটি ব্যতিক্রম ছোঁড়ে:

"উইন্ডো যুক্ত করতে অক্ষম - টোকেন নাল কোনও অ্যাপ্লিকেশনের জন্য নয়"

প্রতি রেফারেন্স: 1 , 2 , 3 , ইত্যাদি

সুতরাং, এটিকে কি "বাগ" হিসাবে বিবেচনা করা উচিত, যেহেতু আমাদের আনুষ্ঠানিকভাবে ব্যবহার করার পরামর্শ দেওয়া হয়েছে Activity.getApplication()এবং এখনও এটি বিজ্ঞাপন হিসাবে কাজ করে না?

জিম


প্রথম আইটেম যেখানে R.Guy getApplication ব্যবহার উপদেশ জন্য রেফারেন্স: android-developers.blogspot.com/2009/01/...
gymshoe

অন্যান্য রেফারেন্স: stackoverflow.com/questions/1561803/...
gymshoe

1
অন্যান্য রেফারেন্স: stackoverflow.com/questions/2634991/...
gymshoe


উত্তর:


1354

পরিবর্তে getApplicationContext(), শুধু ব্যবহার করুন ActivityName.this


67
গ্রেট! কেবল এ সম্পর্কে মন্তব্য করার জন্য .. আপনার শ্রোতার প্রয়োগকৃত পদ্ধতিতে যার নিজস্ব 'এটি' রয়েছে এটির অ্যাক্সেসের জন্য আপনাকে কখনও কখনও বিশ্বব্যাপী "এটি" সংরক্ষণ করতে হবে। সেক্ষেত্রে আপনি বিশ্বব্যাপী "প্রসঙ্গ প্রসঙ্গ" সংজ্ঞায়িত করতে পারেন এবং তারপরে অনক্রিয়েটে "প্রসঙ্গটি = এটি" সেট করুন এবং তারপরে "প্রসঙ্গ" উল্লেখ করুন। আশা করি এটিও কাজে আসবে।
স্টিভেন এল

8
আসলে, Listenerক্লাসগুলি প্রায়শই বেনামে-অভ্যন্তরীণ থাকায় আমি কেবল করণীয় করি final Context ctx = this;এবং আমি দূরে থাকি;)
অ্যালেক্স

28
@ স্টিভেনএল আপনি যা বলছেন তা করতে, আপনার বহিরাগত শ্রেণীর "এটি" স্পষ্টভাবে উল্লেখ করার জন্য এক্সটার্নাল ক্লাসনাম.এটি ব্যবহার করা উচিত।
আর্টেম রাশাকোভস্কিই

11
যদি আপনার ডায়লগটি কলব্যাকে ব্যবহৃত হয় এবং আপনি কলব্যাক কল করার আগে আপনি কার্যকলাপটি ছেড়ে দেন তবে "এই" ব্যবহার করবেন না? কমপক্ষে অ্যান্ড্রয়েড লগকটে অভিযোগ করতে পারে বলে মনে হচ্ছে।
আর্টেম রাশাকোভস্কিই

6
আমি @ স্টিভেনলস পদ্ধতির পরামর্শ দেব না কারণ আপনি অনতিশয় স্ট্যাটিক রেফারেন্সটি সরিয়ে ফেলতে ভুলবেন না যদি না আপনি সহজেই সেই ক্রিয়াকলাপটির স্মৃতিটি ফাঁস করতে পারেন - আর্টেম সঠিক নয়। স্টিভেনএলস পদ্ধতির জাভা কীভাবে কাজ করে তা বোঝার অভাব থেকে বহন করা হয়
ডরি

191

ব্যবহার thisআমার পক্ষে কাজ করে নি, তবে MyActivityName.thisকরেছে। আশা করি এটি যে কারও thisকাছে কাজ করতে না পারায় সহায়তা করে ।


63
আপনি যখন thisকোনও অভ্যন্তর শ্রেণীর অভ্যন্তর থেকে ব্যবহার করেন তখন এটি ঘটে । আপনি যদি বাইরের শ্রেণীর উদাহরণটি উল্লেখ করতে চান তবে আপনাকে অবশ্যই এটি নির্দিষ্ট করতে হবে OuterClass.thisthisসর্বাধিক অভ্যন্তর শ্রেণীর উদাহরণটি কেবল সর্বদা ব্যবহার করে ।
কাকা

60

আপনি ব্যবহার চালিয়ে যেতে পারেন getApplicationContext()তবে ব্যবহারের আগে আপনার এই পতাকাটি যুক্ত করা উচিত: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)এবং ত্রুটিটি প্রদর্শিত হবে না।

আপনার ম্যানিফেস্টে নিম্নলিখিত অনুমতি যুক্ত করুন:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

1
আমি উইন্ডো অ্যান্ড্রয়েড.ভিউ.ভিউরूटআইম্প্লি$ ডাব্লু@426ce670 যুক্ত করতে অক্ষম হয়েছি - এই উইন্ডো প্রকারের জন্য অনুমতি প্রত্যাখ্যান করা হয়েছে
রাম জি।

অনুমতি যুক্ত করুন: <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.SYSTEM_ALERT_WINDOW" />
কোডজজেক্স

3
দেখে মনে হচ্ছে এপিআই 23-এ এই অনুমতি অগ্রে সক্ষম করতে পারে না code.google.com/p/android-developer-preview/issues/...
রায় Zhang

1
আপনি এটি 23 এর পরে এপিআই এর জন্য ব্যবহার করতে পারেন, তবে আপনাকে ব্যবহারকারীকে প্রম্পট করতে হবে: স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট (নতুন ইন্টেন্ট (সেটিংস.অ্যাকশন_ম্যানিকোভারে পোস্টারমিজিয়ানস, উরি.পারস ("প্যাকেজ:" + getPackageName ())), OVERLAY_PERMISSION_REQ_CODE); তবে আপনার এটি ব্যবহার করা উচিত কিনা তা অন্য বিষয় ...
বেন নিল

2
আপনি যখন পরিষেবার অভ্যন্তরে অগ্রগতি কথোপকথনটি
দেখছেন

37

আপনি যখন সমস্যাটি সঠিকভাবে সনাক্ত করেছেন তখন আপনি ... "সতর্কতা ডায়ালগ () এর জন্য get অ্যাপ্লিকেশন কনটেক্সট () বা গেট অ্যাপ্লিকেশন () এর কোনও প্রসঙ্গ হিসাবে গ্রহণযোগ্য নয়, কারণ এটি ব্যতিক্রম ছুঁড়ে ফেলেছে: 'উইন্ডো যুক্ত করতে অক্ষম - টোকেন নাল নয় একটি দরখাস্ত'"

একটি ডায়ালগ তৈরি করতে আপনার একটি ক্রিয়াকলাপ প্রসঙ্গ বা কোনও পরিষেবা প্রসঙ্গে প্রয়োজন , কোনও অ্যাপ্লিকেশন প্রসঙ্গে নয় (উভয় getApplicationContext () এবং getapplication () একটি অ্যাপ্লিকেশন প্রসঙ্গে রিটার্ন করুন)।

আপনি কীভাবে কার্যকলাপের প্রসঙ্গ পাবেন :

(1) একটি ক্রিয়াকলাপ বা কোনও পরিষেবাতে:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

(২) একটি খণ্ডে: AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

মেমরি ফাঁস কোনও সমস্যা নয় যা "এই" রেফারেন্সের সাথে অন্তর্নিহিত, যা নিজের কাছে কোনও বস্তুর রেফারেন্স (অর্থাত্ বস্তুর ডেটা সংরক্ষণের জন্য প্রকৃত বরাদ্দ মেমরির রেফারেন্স)। এটি বরাদ্দ হওয়া কোনও মেমরির জন্য ঘটে যার জন্য আবর্জনা সংগ্রাহক (জিসি) বরাদ্দ মেমরির কার্যকর জীবনকালকে সরিয়ে দেওয়ার পরে মুক্ত করতে অক্ষম।

বেশিরভাগ সময়, যখন কোনও ভেরিয়েবল সুযোগের বাইরে চলে যায়, তখন মেমরিটি জিসি দ্বারা পুনরুদ্ধার করা হবে। যাইহোক, মেমরি ফাঁস তখন ঘটতে পারে যখন কোনও ভেরিয়েবল দ্বারা আটকানো কোনও অবজেক্টের রেফারেন্সটি "x" বলুন, যখন অবজেক্টটি তার কার্যকর জীবনকালকে আউটলাইভ করার পরেও স্থির থাকে। বরাদ্দ হওয়া মেমরিটি যতক্ষণ "x" এর সাথে একটি রেফারেন্স রাখে ততক্ষণ তা হারিয়ে যাবে কারণ জেসি যতক্ষণ স্মৃতিটিকে রেফারেন্স করা হচ্ছে ততক্ষণ স্মৃতিটিকে মুক্ত করে না । কখনও কখনও, বরাদ্দ মেমরির রেফারেন্সগুলির একটি শৃঙ্খলার কারণে মেমরি ফাঁসগুলি স্পষ্ট হয় না । এই জাতীয় ক্ষেত্রে, জিসি যতক্ষণ না সেই মেমরির সমস্ত উল্লেখ মুছে ফেলা হয় ততক্ষণ মেমরিটি মুক্ত করবে না।

মেমরি ফাঁস রোধ করতে, লজিক্যাল ত্রুটির জন্য আপনার কোড পরীক্ষা করুন যা বরাদ্দ মেমরিটিকে "এই" (বা অন্যান্য রেফারেন্স) দ্বারা অনির্দিষ্টকালের জন্য রেফারেন্স করে। চেইন রেফারেন্সগুলিও পরীক্ষা করে দেখুন। মেমরির ব্যবহার বিশ্লেষণ করতে এবং সেইসব মস্তিষ্কের মেমরি ফাঁসের সন্ধান করতে আপনাকে সাহায্য করতে পারেন এমন কয়েকটি সরঞ্জাম এখানে:


একটি কার্যকলাপের জন্য আপনার কাছে ব্যবহার করতে পারেন ActivityName.this যেখানে ActivityName (স্পষ্টত) হল (উদাহরণস্বরূপ MainActivity জন্য) আপনার কার্যকলাপের নাম
লুইস Cabrera বেনিতো

34

আপনার কথোপকথনটি "দীর্ঘজীবী অবজেক্ট যা প্রসঙ্গে প্রয়োজন" হওয়া উচিত নয়। ডকুমেন্টেশন গুলিয়ে ফেলছে। মূলত যদি আপনি কিছু করেন:

static Dialog sDialog;

( স্থির নোট )

তারপরে কোনও ক্রিয়াকলাপে আপনি কোথাও করেছেন

 sDialog = new Dialog(this);

আপনি সম্ভবত কোনও আবর্তনের সময় বা অনুরূপ যা মূল ক্রিয়াকলাপটি নষ্ট করে দেবে সেই সময়ে মূল ক্রিয়াকলাপ ফাঁস করবেন। (যদি আপনি অনডাস্ট্রয়ে সাফ না করেন তবে তবে সম্ভবত আপনি ডায়ালগ অবজেক্টটিকে স্থির করতে পারবেন না)

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

Dialog mDialog;

...

mDialog = new Dialog(this);

ঠিক আছে এবং কার্যকলাপটি ফাঁস করা উচিত নয় কারণ এমডায়ালগটি অচল নয় বলে ক্রিয়াকলাপের সাথে মুক্ত হবে।


আমি এটিকে একটি অ্যাসিনটাস্ক থেকে কল করছি, এটি আমার জন্য কাজ করেছে,
থ্যাक्स

আমার কথোপকথন স্থির ছিল, একবার আমি স্থির ঘোষণাকে এটি সরিয়ে দিয়েছিলাম।
সিডি মুহোজা

25

আমাকে একটি খণ্ডে প্রদর্শিত কাস্টম অ্যাডাপ্টারের একটি কনস্ট্রাক্টরের মাধ্যমে আমার প্রসঙ্গটি প্রেরণ করতে হয়েছিল এবং getApplicationContext () দিয়ে এই সমস্যাটি ছিল। আমি এটি দিয়ে সমাধান করেছি:

this.getActivity().getWindow().getContext()টুকরো টুকরো onCreateকলব্যাক।


4
এটি আমার পক্ষেও কাজ করেছিল, আমি এটি ব্যবহার করছি এমন বহিরাগত এসিঙ্কটাস্কের নির্মাণকারীর কাছে দিয়েছি (এটি একটি অগ্রগতি ডায়ালগ দেখায়)।
রোহন কান্দওয়াল

3
এটি আরও জটিল কাজের জন্য বাস্তব উত্তর :)
তেজয়

1
আমি @tijay- এর সাথে একমত
এরদী gizgi


20

ইন Activityএকটি ডায়লগ বক্স দেখাচ্ছে বোতাম টিপেই

Dialog dialog = new Dialog(MyActivity.this);

আমার জন্য কাজ করেছেন।


19

***** কোটলিন সংস্করণ *****

আপনার this@YourActivityপরিবর্তে applicationContextবা পাস করা উচিতbaseContext


18

লিটল হ্যাক: আপনি জিসি দ্বারা আপনার ক্রিয়াকলাপ ধ্বংস করা রোধ করতে পারেন (আপনার এটি করা উচিত নয় তবে এটি কিছু পরিস্থিতিতে সহায়তা করতে পারে it's এটির আর দরকার নেই তখন সেট contextForDialogকরতে ভুলবেন nullনা):

public class PostActivity extends Activity  {
    ...
    private Context contextForDialog = null;
    ...
    public void onCreate(Bundle savedInstanceState) {
        ...
        contextForDialog = this;
    }
    ...
    private void showAnimatedDialog() {
        mSpinner = new Dialog(contextForDialog);
        mSpinner.setContentView(new MySpinner(contextForDialog));
        mSpinner.show();
    }
    ...
}

@ মুরতুজাকাবুল এটি কাজ করে কারণ এই == পোস্টঅ্যাক্টিভিটি যা ক্রিয়াকলাপ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়> যা কনটেক্সট থেকে উত্তরাধিকার সূত্রে আসে তাই আপনি যখন ডায়লগটি পাস করেন তখন আপনার প্রসঙ্গটি আপনি আসলে ক্রিয়াকলাপটি অতিক্রম করছেন
এলাদ গেলম্যান

13

যদি আপনি কোনও খণ্ড ব্যবহার করে এবং সতর্কতা ডায়ালগ / টোস্ট বার্তা ব্যবহার করেন তবে কনটেক্সট প্যারামিটারে getActivity () ব্যবহার করুন।

এটার মত

ProgressDialog pdialog;
pdialog = new ProgressDialog(getActivity());
pdialog.setCancelable(true);
pdialog.setMessage("Loading ....");
pdialog.show();

12

কেবল নিম্নলিখিত ব্যবহার করুন:

জাভা ব্যবহারকারীদের জন্য

আপনি যদি ক্রিয়াকলাপটি ব্যবহার করছেন -> AlertDialog.Builder builder = new AlertDialog.Builder(this);

অথবা

AlertDialog.Builder builder = new AlertDialog.Builder(your_activity.this);

আপনি যদি খণ্ড -> ব্যবহার করছেন AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

কটলিন ব্যবহারকারীদের জন্য

আপনি যদি ক্রিয়াকলাপটি ব্যবহার করছেন -> val builder = AlertDialog.Builder(this)

অথবা

val builder = AlertDialog.Builder(this@your_activity.this)

আপনি যদি খণ্ড -> ব্যবহার করছেন val builder = AlertDialog.Builder(activity!!)


9

যোগ

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

এবং

"android.permission.SYSTEM_ALERT_WINDOW"/> প্রকাশ্যে

এটা এখন আমার জন্য কাজ করে। এমনকি অ্যাপ্লিকেশনটি বন্ধ এবং খোলার পরেও আমাকে ত্রুটিটি দিয়েছে।


9

আমি ProgressDialogএকটি খণ্ডে ব্যবহার করছি এবং getActivity().getApplicationContext()কনস্ট্রাক্টর পরামিতি হিসাবে পাস করার সময় এই ত্রুটিটি পাচ্ছিলাম । এটিতে getActivity().getBaseContext()কোনও পরিবর্তন হয়নি।

আমার জন্য যে সমাধানটি কাজ করেছিল তা হ'ল উত্তরণ getActivity(); অর্থাত

progressDialog = new ProgressDialog(getActivity());



6

আপনি যদি কার্যকলাপের বাইরে থাকেন তবে আপনার ক্রিয়াকলাপ ক্রিয়াকলাপ হিসাবে "NameOfMyActivity.this" ফাংশনটি ব্যবহার করা দরকার, উদাহরণস্বরূপ:

public static void showDialog(Activity activity) {
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setMessage("Your Message")
        .setPositiveButton("Yes", dialogClickListener)
        .setNegativeButton("No", dialogClickListener).show();
}


//Outside your Activity
showDialog(NameOfMyActivity.this);

5

আপনি যদি কোনও খণ্ড ব্যবহার AlertDialog / Toastকরছেন এবং কোনও বার্তা ব্যবহার getActivity()করছেন তবে প্রসঙ্গের পরামিতিটি ব্যবহার করুন ।

আমার জন্য কাজ করেছেন।

চিয়ার্স!


5

কথোপকথনের অধীনে থাকা কোনও ক্রিয়াকলাপের প্রসঙ্গটি ব্যবহার করার চেষ্টা করুন। আপনি "এই" কীওয়ার্ডটি ব্যবহার করার সময় সতর্ক থাকুন, কারণ এটি প্রতিটি সময় কাজ করে না।

পূর্বাভাস উদাহরণ, যদি আপনার দুটি ট্যাব সহ হোস্ট হিসাবে ট্যাবএক্টিভিটি থাকে এবং প্রতিটি ট্যাব অন্য ক্রিয়াকলাপ হয় এবং আপনি যদি কোনও ট্যাব (ক্রিয়াকলাপ) থেকে ডায়ালগ তৈরি করার চেষ্টা করেন এবং আপনি "এটি" ব্যবহার করেন তবে আপনি ব্যতিক্রম পাবেন, এতে কেস ডায়ালগটি হোস্ট ক্রিয়াকলাপের সাথে সংযুক্ত হওয়া উচিত যা সমস্ত কিছু হোস্ট করে এবং দৃশ্যমান। (আপনি সর্বাধিক দৃশ্যমান পিতামাতার ক্রিয়াকলাপের প্রসঙ্গে বলতে পারেন)

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


4

ভবিষ্যতের পাঠকদের জন্য এটির সহায়তা করা উচিত:

public void show() {
    if(mContext instanceof Activity) {
        Activity activity = (Activity) mContext;
        if (!activity.isFinishing() && !activity.isDestroyed()) {
            dialog.show();
        }
    }
}



2

আমি মনে করি আপনি যদি কোনও থ্রেড থেকে মূল ইউআই থ্রেড নয় এমন একটি ডায়ালগ দেখানোর চেষ্টা করছেন তবে এটিও ঘটতে পারে।

সেক্ষেত্রে ব্যবহার করুন runOnUiThread()


2

getParent()নতুন AlertDialog.Builder(getParent());আশার মতো প্রসঙ্গের যুক্তির জায়গায় চেষ্টা করুন এটি কাজ করবে, এটি আমার পক্ষে কাজ করেছিল।


1

API এ একবার দেখার পরে, আপনি যদি কোনও খণ্ডে থাকেন তবে ডায়ালগটি আপনার ক্রিয়াকলাপটি বা গতিঅ্যাক্টিভিটি পাস করতে পারেন, তবে ফাঁস রোধ করতে রিটার্ন পদ্ধতিতে ডায়লগ.ডিজমিস () দিয়ে জোর করে এটিকে পরিষ্কার করুন।

যদিও আমি জানি না কেন এটি স্পষ্টভাবে বলা হয়নি, তবে মনে হচ্ছে আপনি এটি করতে অনক্লিকহ্যান্ডলারের ডায়ালগটি ফিরে পেয়েছেন।


0

যদি আপনার ডায়ালগ অ্যাডাপ্টারে তৈরি করে থাকে:

ক্রিয়াকলাপটি অ্যাডাপ্টার কনস্ট্রাক্টরে পাস করুন:

adapter = new MyAdapter(getActivity(),data);

অ্যাডাপ্টারে রিসিভ করুন:

 public MyAdapter(Activity activity, List<Data> dataList){
       this.activity = activity;
    }

এখন আপনি আপনার বিল্ডারে ব্যবহার করতে পারেন

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);

-1

আমি আমার অ্যাপ্লিকেশনটির জন্য একই ত্রুটিটি কীভাবে সমাধান করেছি তা এখানে
: ডায়ালগটি তৈরি করার পরে নিম্নলিখিত লাইনটি যুক্ত করা:

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);  

আপনার কোনও প্রসঙ্গ অর্জনের প্রয়োজন হবে না। আপনি যদি পপ আপ ডায়ালগের উপরে আর একটি ডায়ালগ পপ করছেন তবে এটি বিশেষত কার্যকর। বা যখন কোনও প্রসঙ্গ পাওয়া সুবিধাজনক নয়।

আশা করি এটি আপনার অ্যাপ্লিকেশন বিকাশে আপনাকে সহায়তা করতে পারে।

ডেভিড


-1
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(getWindow().getDecorView().getRootView().getContext());

builder.setTitle("Confirm");
builder.setMessage("Are you sure you want delete your old account?");

builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        //Do nothing but close the dialog



        dialog.dismiss();

    }
});

builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {

        //Do nothing
        dialog.dismiss();
    }
});

android.support.v7.app.AlertDialog alert = builder.create();
alert.show();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.