2012-02-03 215 views
0

我寫過一個擴展View類來顯示一些數據的類。用戶需要能夠通過點擊它來操作這些數據,並在對話框中顯示各種選項。Android:顯示對話框類

但是,我得到的問題是,在Android中,要初始化一個AlertDialog.Builder實例,您必須傳入「this」(如在活動中)才能使其工作(getApplicationContext()不會工作 - 看到這篇文章:Dialog throwing "Unable to add window — token null is not for an application」 with getApplication() as context

我怎麼能通過這個問題,並顯示在我的課內擴展視圖對話框?

回答

0

您必須已經發布了一些代碼,或LT與

getParent(); 

,而不是this.And嘗試請出示一些代碼,我們

+0

getParent在視圖內返回一個ViewParent對象,該對象不能用於對話框顯示。我也嘗試通過構造函數將該活動傳遞到類中,並使用getParent來處理那些不起作用的... – 2012-02-06 14:43:03

3

如果你需要從非視圖類打開一個消息那麼你有兩個解決方案:

或者

  • 從你的Android設備上查看,當實例類,傳遞一個上下文類的構造函數,然後存儲此背景下。您可以在警報箱中使用它。

要與上下文傳遞mecanism小心內存泄漏的

編輯:

我在寫一些代碼來讓你去如何使用處理程序時,我花了一個機會,去了文件。通常沒有任何用處,但對於這種特殊情況,哦奇蹟,看看我發現的,完整和易於理解的代碼示例如何使用處理程序及其消息機制。 http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar

EDIT2後方可評論

由於運:這是下的可摺疊標題( 「http://developer.android.com/guide/topics/ui/dialogs.html#ShowingAProgressBar」)隱藏希望它的對象可以在不同的活動中重用,所以不需要使用處理程序,而是將上下文(真正的調用活動的鏈接)傳遞給對象。該對象將能夠在dialog.builder中使用該上下文。

在您的活動類的所謂MyActivity的OnCreate中:

MyCustomObject myObject = new MyCustomObject(this); 

在你的對象類

Class MyCustomObject { 
    private MyActivity mContext; 

    void MyCustomObject(MyActivity context) { 
    this.mContext = context; 
    } 

    private showDialog(String message) { 
    AlertDialog.Builder alert = new AlertDialog.Builder(mContext);//we use the context 
    } 
} 

不要忘了銷燬廢棄的對話框Builder和mContext當你與完成你的對象。這可能會非常快地泄漏內存。

+0

我正在做這件事,在AlertBuilder.dialog構造器中存在一個錯誤,您無法在getApplicationContext中傳遞();唯一有效的方法是從活動中傳遞「this」。但是,通過這個,仍然會導致在我的帖子中鏈接到的線程中提到的「無效令牌」異常... – 2012-02-05 11:18:45

+0

從我的理解你的帖子,你根本就沒有做我告訴你的嘗試:使用Handler或將活動上下文傳遞給您的類,並將其存儲爲局部變量,以便專門用於alertDialog調用。除此之外,如果我的理解是正確的,applicationContext不起作用不是一個錯誤,因爲applicationcontext沒有鏈接到ui線程。我將用一些代碼更新我的答案。 – Yahel 2012-02-06 09:33:45

+0

好的,我明白了,所以你說的是顯示對話框的最好方法是從活動類中。我希望在視圖本身中擁有所有對話框代碼的原因是,無論視圖部署在哪裏,對話框處理代碼都是相同的 - 還有很多對話代碼必須每次都要重新編寫。也許有一種更簡單的方法來處理我曾經考慮過的活動中的對話框? – 2012-02-06 14:41:51