آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نمایش پیفام مناسب درهنگام حذف از پروژه Note

Amin_913  11 سال پیش  11 سال پیش
0 0

سلام در پروژه Note میخوام وقتی کاربر برروی دکمه حذف کلیک کردیم، ابتدا یک پیغام مناسب نمایش بده و بعد اگر تائید کرد، حذف بشه وگرنه برگرده به لیست ویو این کد منه:

 imgDelete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
showAlertDialog(item);

}
});
private void showAlertDialog(final StructدNote item) {
AlertDialog.Builder builder = new AlertDialog.Builder(/*اینجا چه کانتکستی روبزنم*/);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage("از حذف مطمئن هستید؟");
builder.setTitle("حذف ");
builder.setPositiveButton("بلی", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(G.context, "Click On YES", Toast.LENGTH_SHORT).show();
adapter.remove(item);

ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "" + item.id));
Commands.remove(params);
}
});
builder.setNegativeButton("خیر", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(G.context, "Click On NO", Toast.LENGTH_SHORT).show();
}
});

builder.create().show();
}

اینم خطا: (مشکل تو کانتکستهاییه که میزنم) درواقع نمیدونم توی اداپتر چه کانتکستی بایدباشه

at android.view.ViewRootImpl.setView(ViewRootImpl.java:536)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at com.app.appnote.AdapterNote$ViewHolder$3.showAlertDialog(AdapterNote.java:134)
at com.app.appnote.AdapterNote$ViewHolder$3.onClick(AdapterNote.java:104)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

+1 0
کانتکس اکتیویتی بزن یا this (11 سال پیش)
0 0
همه کانتکست ها رو امتحان کردم، یا نشون نمیده یا FCمیده، ضمن اینکه این خودش اکتیویتی نیست و یک کلاسه که بعدا درون اکتیویتی فراخوانی میشه، کانتکستهایی که امتحان کردم:G.context,getBaseContext,thish,ActivitymMain.this,activty(); (11 سال پیش)
0 0
تنها Contextـی که جواب میده برای AlertDialog همون Activity هست که javac اشاره کردن ، توی logcatـی هم که گذاشتین علت خطا نوشته نشده (ناقص گذاشتین) (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+1 0

بهترین کار همون استفاده از Enhanced Activity استاد هست ، یعنی شما همیشه اکتیویتی جاری رو در G.currentActivity دارید پس خیلی ساده به Context هم دسترسی دارید :)

0 0
تمام اینها برای زمانی کاربرد داره که بخوای دیالوگ رو توی اکتیویتی کار کنی ولی من میخوام دیالوگ رو تویonClickدکمه حذف داخل adapterNoteصدا بزنم وهمونطور که میدونید اون یک کلاس مجزا هست و دیالوگ من در داخل متدهای اون کلاس ساخته میشه و در اونجا هیچ کانتکستی وجود ندارده که اون کار رو بکنه (11 سال پیش)
+1 0
این کار در آداپتور لیست انجام میشه و با روشی که گفتیم قابل انجام هست ، قبلا تست کردم :) (11 سال پیش)
0 0
بله ممنون، از اونجایی که نوشتن پاسخ بعدی من و پاسخ شما همزمان قرار گرفت، من پاسختون رو ندیدم با همون فرمایش شما مشکل برطرف شد.G.currentActivity (11 سال پیش)
پاسخ به سوال 
Amin_913  11 سال پیش
0 0

شما کد زیر رو دقیقا بجای imgDelete.onClickListener قرار بدید تا متوجه منظورم بشید:

  imgDelete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
imgDelete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
showAlertDialog(item);

}


private void showAlertDialog(final StructTask item) {
AlertDialog.Builder builder = new AlertDialog.Builder(G.context);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage("از حذف مطمئن هستید؟");
builder.setTitle("حذف ");
builder.setPositiveButton("بلی", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(G.context, "Click On YES", Toast.LENGTH_SHORT).show();
adapter.remove(item);
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "" + item.id));
Commands.remove(params);
}
});
builder.setNegativeButton("خیر", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(G.context, "Click On NO", Toast.LENGTH_SHORT).show();
}
});

builder.create().show();
}

});
}
});

 

پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+1 0

مهندس جان دقیقا میدونم مشکل چیه ! ، اصلا نیازی به تکرار نیست ، شما دارید میگید context دیالوگ ، G.context هست ، این در حالی هست که شما در اکتیویتی نیستید ! ، در یک کلاس جاوا هستید ، بنابراین اگه درست یادم بیاد ، یه خطایی میده مبنی بر اینکه این مقدار context مناسب نیست و در اون نقطه قابل دسترسی نیست ، اما وقتی شما بگید G.currentActivity.this دقیقا دارید به اکتیویتی ای که لیست ویو در اون هست ، و context اش اشاره میکنید :)

حتی اگه یه متد استاتیک تعریف کنید هم مشکل حل نمیشه ، چرا که کلا در static ها context معنی نداره ، پس وقتی شما اون کد رو بزارید داخل اکتیویتی لیست ویو و استاتیک اش کنید ، بازم به شما میگه که activityList.this در اون نقطه در دسترس نیست ، پس پیشنهاد میشه یه پارامتر به متد اضافه کنید به نام کانتکس که چون بازم در اون آداپتور context ندارید ، روز از نو روزی از نو ، دوباره باید اکتیویتی فعلی رو داشته باشید که بر میگردید به همون موضوع ذخیره ی اکتیویتی فعلی در onResume 

امیدوارم کمکتون کرده باشم


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .