我有两个AlertDialogs,从第一个AlertDialog我来到第二个。我的目标是使用第二个修改第一个AlertDialog中的标题。
当我尝试使用setTitle()方法设置alertDialog2的标题时,它告诉我alertDialog2必须是final,但是如果我将对象alertDialog2设置为final,我就无法修改它。
AlertDialog alertDialog2 = new AlertDialog.Builder(MainActivity.this).create();
place="";
alertDialog2.setTitle(place); //this is the original place
alertDialog2.setMessage(text);
alertDialog2.setButton(Dialog.BUTTON_NEUTRAL, "Set Place", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final CharSequence[] items = {" Place1 "," Place2 "," Place3 "," Place4 "};
// Creating and Building the Dialog
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Select Place");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch(item)
{
case 0:
// Your code when first option seletced
place=String.valueOf(items[0]);
break;
case 1:
// Your code when 2nd option seletced
place=String.valueOf(items[1]);
break;
case 2:
// Your code when 3rd option seletced
place=String.valueOf(items[2]);
break;
case 3:
// Your code when 4th option seletced
place=String.valueOf(items[3]);
break;
}
}
});
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
alertDialog2.setTitle(place); // Here I can not set the title
alertDialog2.show();
}
});
builder.create();
builder.show();
}
});
alertDialog2.setButton(Dialog.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show();
}
});
alertDialog2.show();
答案 0 :(得分:1)
尝试将AlertDialog alertDialog2
作为类变量,而不是在任何函数中定义和初始化。
AlertDialog alertDialog2;
void tempFunction()
{
alertDialog2=new AlertDialog.Builder(MainActivity.this).create();
.
.
.
.
}
希望它有所帮助...
要理解这种事情需要2分钟来理解内存映射和堆叠,只要函数执行它的本地资源就会被添加到堆栈并执行,所以如果你在本地函数中分配一个对话框,它将被立即删除从那里离开...但是如果你把它分配为全球并且假设它有2100的地址那么你可以每次更改内容就像一个锅,你可以填充水,如咸,甜等等的水... ...和想象力确实有很多帮助,并且在很多情况下也有助于克服Nullpointer例外......
THX
答案 1 :(得分:0)
只要您未在代码中重新分配,就可以宣布它为最终版。
http://en.wikipedia.org/wiki/Final_(Java)
此外,您的AlertDialog在创建时没有标题。您需要在创建标题时为其添加标题,您只需在创建标题后添加标题即可。