在builder.create()上崩溃

时间:2017-07-24 17:05:08

标签: java android

我似乎无法真正想出这一个。我正在尝试制作一个简单的AlertDialog,但每次执行代码时,它都会在.create()部分崩溃。

以下是代码:

   AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

    builder.setTitle("Select Unit:")
            .setItems(units, new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    unitIndex = i;
                }
            });

    AlertDialog dialog = builder.create();
    dialog.show();

如果重要的话,它处于无效函数中(因为它应该是从onclick事件执行的)

谢谢!

编辑(LOGCAT):

[ 07-24 17:10:10.291 10948:11095 W/         ]

Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 
07-24 17:10:13.019 10948-10948/com.example.alexanderfehr.speedo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.alexanderfehr.speedo, PID: 10948
android.content.res.Resources$NotFoundException: Resource ID #0x0
t android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2094)
at android.content.res.Resources.getLayout(Resources.java:1111)
at android.view.LayoutInflater.inflate(LayoutInflater.java:424)
at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
at android.support.v7.app.AlertController$AlertParams.createListView(AlertController.java:966)
at android.support.v7.app.AlertController$AlertParams.apply(AlertController.java:942)
at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:930)
at com.example.alexanderfehr.speedo.MainActivity.setUnit(MainActivity.java:188)
at com.example.alexanderfehr.speedo.MainActivity.access$000(MainActivity.java:27)
at com.example.alexanderfehr.speedo.MainActivity$2.onClick(MainActivity.java:93)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

我是一个使用logcat的新手,似乎这里的信息很少,所以如果有人知道我应该怎么做才能得到完整的错误请告诉我,对不起:我

3 个答案:

答案 0 :(得分:0)

正如我在文档中看到的那样:https://developer.android.com/reference/android/app/AlertDialog.Builder.html

setItems方法正在使用itemId作为第一个参数。我可以看到,你作为第一个参数传递units。检查units是否有效itemId

此外,您的构造可能会更改为:

    alertDialogBuilder
        .setMessage("Click yes to exit!")
        .setCancelable(false)
        .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                // if this button is clicked, close
                // current activity
                MainActivity.this.finish();
            }
          })
        .setNegativeButton("No",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                // if this button is clicked, just close
                // the dialog box and do nothing
                dialog.cancel();
            }
        });

看到此构造中没有setItems ...没有要发送的itemId。

答案 1 :(得分:0)

我创建并测试了这种方法:

public void createDialog() {

        CharSequence[] example = {"one", "two"};

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.app_name)
                .setItems(example, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // The 'which' argument contains the index position
                        // of the selected item
                        Toast.makeText(getApplicationContext(), "You choose: " + which, Toast.LENGTH_SHORT).show();
                    }
                });
        builder.create().show();

    }

它工作正常。尝试使用它并让我知道。尝试在onClick的{​​{1}}中调用此方法,例如Fab

答案 2 :(得分:0)

也许明确地设定主题会有所帮助。

将其放入styles.xml

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

用它创建你的AlertDialog.Builder。

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