安卓AlertDialog异常“Resources$NotFoundException”

10

在 Android 中尝试显示对话框时,我遇到了一个异常。我的 AlertDialog 是使用以下代码从 FragmentActivity 调用的:

public static void displayShare(){
    // show share options
    CharSequence selections[] = new CharSequence[] {"Email", "SMS", "Tweet", "Phone Call", "Cancel"};
    final AlertDialog.Builder builder = new AlertDialog.Builder(CommonVariables.mContext);
    builder.setTitle("Share your location via...");
    builder.setItems(selections, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch(which){
                case 0: // Email
                   callEmailMethod();
                    break;
                case 1: // SMS
                    callSMSMethod();
                    break;
                case 2: // Tweet
                    callTwitterMethod();
                    break;
                case 3: // Phone Call
                    callNumberMethod();
                    break;
                case 4:
                    dialog.cancel();
                    break;
            }
        }
    });
    builder.show();
}
收到以下错误消息:在该行收到:builder.show();
    FATAL EXCEPTION: main
Process: com.au.ewn.melbwater, PID: 2839
android.content.res.Resources$NotFoundException: Resource ID #0x0
    at android.content.res.Resources.getValue(Resources.java:1351)
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2774)
    at android.content.res.Resources.getLayout(Resources.java:1165)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:421)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at android.support.v7.app.AlertController$AlertParams.createListView(AlertController.java:879)
    at android.support.v7.app.AlertController$AlertParams.apply(AlertController.java:856)
    at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:899)
    at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:917)
    at com.au.ewn.activities.MainFragment.displayShare(MainFragment.java:1081)
    at com.au.ewn.activities.HelpMeScreen$2.onClick(HelpMeScreen.java:257)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我似乎已经尝试了所有方法,但没有找到正确的解决方案。感谢您提供任何帮助。

注意:CommonVariables.mContext是FragmentActivity的上下文,并且不为null:CommonVariables.mContext = FragmentAct.this;


1
https://dev59.com/YVwY5IYBdhLWcg3wFkej - Bill
你确定 mContext 是当前的,而不是指向 Activity 的某个过去实例吗? - Jarrod Smith
被接受的答案没有帮助,我一个小时前就尝试过了。另一个评论确实有用,AlertDialog没有Style资源,而以前是有的...与多个开发人员合作的乐趣。感谢您让我回到那个问题! - Nickmccomb
2个回答

23

问题在于我的项目缺少AlertDialog的样式资源:

在styles.xml中添加以下内容:

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />

在您创建警报对话框的代码中,请加入以下内容:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialogTheme);

感谢@Fraranc在这篇文章中的回答:Resources$NotFoundException: Resource ID #0x0 in AlertDialog


2

抱歉我来晚了。

但是我也遇到了这个问题,我在网上找到了这3种解决方法:

  1. 使用baseContext。
  2. 在初始化对话框时使用when。
  3. 特定drawable文件夹中缺少布局。

帮助我解决问题的是我的alerdialog位于fragment中,当初始化alertdialog时,通过调用requiredContext()而不是baseContextapplicationContext来解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接