Java 在builder.create()上崩溃
我似乎真的搞不懂这个。我试图创建一个简单的Java 在builder.create()上崩溃,java,android,Java,Android,我似乎真的搞不懂这个。我试图创建一个简单的警报对话框,但每次执行代码时,它都会在.create()部分崩溃 代码如下: AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Select Unit:") .setItems(units, new DialogInterface.OnClickListener(){
警报对话框
,但每次执行代码时,它都会在.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();
如果这很重要的话,它就在void函数中(因为它应该从onclick事件执行)
谢谢
编辑(LOGCAT):
我对使用logcat有点陌生,这里的信息似乎很少,所以如果有人知道我应该怎么做才能得到完整的错误,请告诉我,很抱歉:我在文档中看到:
setItems方法对第一个参数使用anditemId
。如我所见,您正在传递单位
作为第一个参数。检查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。我创建并测试了此方法:
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();
}
而且效果很好。试着用一下,让我知道。尝试调用此方法,例如在
Fab
的onClick
中,如createDialog()
可能显式设置主题会有所帮助
将其放入styles.xml中
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />
如果它崩溃,请在logcat上发布堆栈跟踪并设置错误范围。是的,对不起,我对使用android studio有点陌生,所以如果我把日志弄乱了,请让我知道如何更正它…什么类型的变量是“setItems”中的“units”?字符串[],我开始认为这就是问题所在。您应该使用xml字符串数组,对吗?在这种情况下,如何将它从xml文件链接到java?在阅读文档后,我似乎弄乱了数据类型,但在将其切换到xml字符串数组并链接到该数组后,它仍然以相同的方式崩溃…setItem
也将CharSequence[]items
作为第一个参数。奇怪的是,模拟器和我的手机都不工作。编辑:好吧,我在一个新项目中试用过,效果很好,所以这变得越来越奇怪…所以问题不是AlertDialog。当你按下调用方法的按钮或启动应用程序时在“onCreate()”中的按钮时,应用程序是否崩溃?如果你可以在MainActivity中发布所有代码,我可以看到错误在哪里解决了,似乎主题是问题所在,将其改回stock,现在它可以工作了。希望这只是一个将被修复的bug…哦,哇,这确实有效。我猜Material.Light.NoActionBar不支持alertdialogs,因此失败了?无论如何谢谢你!那么,SDK应该附带一个默认的。如果没有,您可以按此处描述的方式添加它。
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.MyDialogTheme);