gpt4 book ai didi

java - 扩展 AlertDialog

转载 作者:太空狗 更新时间:2023-10-29 13:36:27 26 4
gpt4 key购买 nike

我需要在 AlertDialog 中存储一个额外的值(标签),所以我扩展了这个类。使用这个新类时,我确实得到了 ClassCastException。我的代码有什么问题?

这是我扩展的 AlertDialog:

public class MyAlertDialog extends AlertDialog {

private long tag;

public MyAlertDialog(final Context context) {
super(context);
}

public MyAlertDialog(final Context context, final int theme) {
super(context, theme);
}

public MyAlertDialog(final Context context, final boolean cancelable, final OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}

public long getTag() {
return tag;
}

public void setTag(final long tag) {
this.tag = tag;
}
}

这是使用新类的 ListActivity 的一部分:

public class MyListActivity extends ListActivity {
private MyAlertDialog alertDialog;
private long id;

@Override
public boolean onContextItemSelected(final MenuItem menuItem) {
// ..
processAlertDialog(id);
// ..
return super.onContextItemSelected(menuItem);
}

private void processAlertDialog(final long id) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setMessage(R.string.txt_reallydelete);
alertDialogBuilder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {

@Override
public void onClick(final DialogInterface dialogInterface, final int which) {
dialogInterface.dismiss();
}
} );
alertDialogBuilder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

@Override
public void onClick(final DialogInterface dialogInterface, final int which) {
dialogInterface.dismiss();

// do Something
}
} );

// ClassCastException
alertDialog = (MyAlertDialog) alertDialogBuilder.create();
alertDialog.setTag(id);
alertDialog.show();
}
}

非常感谢。

编辑:

Uncaught handler: thread main exiting due to uncaught exception
java.lang.ClassCastException: android.app.AlertDialog
at com.test.app.MyListActivity.processAlertDialog(MyListActivity.java:234)
at com.test.app.MyListActivity.onContextItemSelected(MyListActivity.java:99)
at android.app.Activity.onMenuItemSelected(Activity.java:2174)
at com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2731)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:129)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3285)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

因为当您创建“MyAlertDialog”时,您并未创建实际的“MyAlertDialog”对象。您创建了“AlertDialog.Builder”对象并将其转换为“MyAlertDialog”。

你为什么要这样做??

我认为您可以像这样创建和显示您自己的对话框,

private void processAlertDialog(final long id) {
MyAlertDialog alertdialog = new MyAlertDialog(this);

alertdialog.setCancelable(false);
alertdialog.setMessage(R.string.txt_reallydelete);

// your button's call back

alertdialog.setTag(id);
alertdialog.show();
}

关于java - 扩展 AlertDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9954319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com