2014-05-20 24 views
0

我有两个AlertDialogs,并从第一AlertDialog我来第二次。我的目标是修改标题从第一个AlertDialog使用第二个。Android的 - 最后修改标题AlertDialog

当我尝试使用该方法的setTitle(),它告诉我,alertDialog2必须是最终的,但如果我设置对象alertDialog2到最终,我不能修改其设置alertDialog2的称号。

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

这不是一个回答你的问题,但像这样的对话框(警告和progressDialogs过),你需要妥善处理关闭它们,我会建议将它们设置为null,一旦他们已经关闭。对话框容易发生内存泄漏。 使用: 如果(!DialogInterface!= null){ DialogInterface.close(); DialogInterface = null; } –

+0

这将是最好只使用'DialogFragment'您的所有对话。 – ashishduh

+0

感谢您的建议。 – david

回答

1

通过使AlertDialog alertDialog2作为类变量,而不是限定,并且在任何功能intializing尝试一次。

AlertDialog alertDialog2; 

void tempFunction() 
{ 
     alertDialog2=new AlertDialog.Builder(MainActivity.this).create(); 
     . 
     . 
     . 
     . 

} 

希望它可以帮助...

要了解这种东西给2分钟来了解存储器映射和堆叠每当函数执行它的本地资源被添加到堆栈和执行,所以如果妳在分配给本地功能的对话框中,可以尽快从那里离开删除......但如果ü将其指定为全球和假设它有2100地址,然后ü可以每次改变内容的如锅其中U可以补watever类型的像咸,甜等..内存映射和想象力也帮助了很多,将有助于还克服了在许多情况下,空指针异常水...

THX

+0

你的灵感来自于我,我在第一个alertDialog上创建了一个AlertDialog.builder类,然后所有的作品都完美无缺 – david

0

你可以只是声明它是最终的,只要你是不是在你的代码重新分配给它更高版本。

http://en.wikipedia.org/wiki/Final_(Java)

此外,您AlertDialog没有创建时有一个标题。创建标题时需要给它一个标题,创建标题后不能添加标题。

+0

那么我该如何去重新分配标题呢? – david

+0

你不重新分配标题,你可以调用AlertDialog的'setTitle'成员函数。 “final”并不意味着你不能再对该对象进行操作,而只是意味着你不能多次指定它。 – ashishduh

+0

感谢您的解释,但我已将其更改为final,但标题不会更改。 – david