نمایش پیفام مناسب درهنگام حذف از پروژه Note
سلام در پروژه 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)
بهترین کار همون استفاده از Enhanced Activity استاد هست ، یعنی شما همیشه اکتیویتی جاری رو در G.currentActivity دارید پس خیلی ساده به Context هم دسترسی دارید :)
شما کد زیر رو دقیقا بجای 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();
}
});
}
});
مهندس جان دقیقا میدونم مشکل چیه ! ، اصلا نیازی به تکرار نیست ، شما دارید میگید context دیالوگ ، G.context هست ، این در حالی هست که شما در اکتیویتی نیستید ! ، در یک کلاس جاوا هستید ، بنابراین اگه درست یادم بیاد ، یه خطایی میده مبنی بر اینکه این مقدار context مناسب نیست و در اون نقطه قابل دسترسی نیست ، اما وقتی شما بگید G.currentActivity.this دقیقا دارید به اکتیویتی ای که لیست ویو در اون هست ، و context اش اشاره میکنید :)
حتی اگه یه متد استاتیک تعریف کنید هم مشکل حل نمیشه ، چرا که کلا در static ها context معنی نداره ، پس وقتی شما اون کد رو بزارید داخل اکتیویتی لیست ویو و استاتیک اش کنید ، بازم به شما میگه که activityList.this در اون نقطه در دسترس نیست ، پس پیشنهاد میشه یه پارامتر به متد اضافه کنید به نام کانتکس که چون بازم در اون آداپتور context ندارید ، روز از نو روزی از نو ، دوباره باید اکتیویتی فعلی رو داشته باشید که بر میگردید به همون موضوع ذخیره ی اکتیویتی فعلی در onResume
امیدوارم کمکتون کرده باشم
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .