Android - 修改最后一个AlertDialog标题

时间:2014-05-20 17:56:42

标签: android alertdialog android-alertdialog

我有两个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();

2 个答案:

答案 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在创建时没有标题。您需要在创建标题时为其添加标题,您只需在创建标题后添加标题即可。