我似乎无法真正想出这一个。我正在尝试制作一个简单的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的新手,似乎这里的信息很少,所以如果有人知道我应该怎么做才能得到完整的错误请告诉我,对不起:我
答案 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);