2014-05-20 89 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