Android AlertDialog 异常 "Resources$NotFoundException"
Android AlertDialog exception "Resources$NotFoundException"
我在 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.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的上下文,不为空:CommonVariables.mContext = FragmentAct.this;
问题是我的项目缺少 AlertDialog 的样式资源:
在 styles.xml 中输入:
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />
在您创建警报对话框的代码中输入:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialogTheme);
感谢@Fraranc 在这个 post 中的回答:
对不起,如果我迟到了。
但我也遇到过这个问题以及我在互联网上找到的 3 个解决方案,例如:
- 使用baseContext。
- 在启动对话时使用。
- 特定可绘制文件夹中缺少布局。
帮助我解决问题的是我的 alerdialog 位于片段中,它通过在启动 alertdialog 时调用 requiredContext()
而不是 baseContext
或 applicationContext
来解决。
我在 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.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的上下文,不为空:CommonVariables.mContext = FragmentAct.this;
问题是我的项目缺少 AlertDialog 的样式资源:
在 styles.xml 中输入:
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />
在您创建警报对话框的代码中输入:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialogTheme);
感谢@Fraranc 在这个 post 中的回答:
对不起,如果我迟到了。 但我也遇到过这个问题以及我在互联网上找到的 3 个解决方案,例如:
- 使用baseContext。
- 在启动对话时使用。
- 特定可绘制文件夹中缺少布局。
帮助我解决问题的是我的 alerdialog 位于片段中,它通过在启动 alertdialog 时调用 requiredContext()
而不是 baseContext
或 applicationContext
来解决。