2012-05-28 21 views
0

我有一個類來控制我的應用程序邏輯,而不是擴展Activity的那個,並且在最後一個內部聲明它。在外部類中使用Toast

我想知道是否有一種方法可以在該課堂上使用烤麪包。

我試着用Activity擴展這個類,並在構造函數中發送上下文,但它沒有工作。

編輯:

在這裏,你有我如何通過構造函數中的上下文有關的代碼:

GameController newgame = new GameController(getApplicationContext()); 

public GameController(Context _context) 
{  
    //...  
    context = _context; 
} 

Toast.makeText(context, "You can't bet this amount, the minimun bet is: " + minimun_bet, 2).show(); 

當我運行此我得到這個錯誤:

05-29 10:58:06.230: E/AndroidRuntime(5753): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
+0

你可以粘貼你的構造函數代碼 –

+0

無論你的邏輯控制類是被創建的,它都必須從某種類型的Activity中實例化。因此,在您的控件類中添加一個'Context'成員,並將'this'從該活動傳遞給其構造函數。 –

+0

剛剛添加了我在構造函數中使用的代碼。 – AZorrozua

回答

1
public class ClassName {   
    public ClassName(Activity _activity) { 
      Toast.makeText(_activity, "text", Toast.LENGTH_LONG).show(); 
    } 
} 

你可以使用它作爲ClassName(YourActivity.this);

+0

我使用這種方法得到相同的運行時錯誤: 05-29 11:11:05.027:E/AndroidRuntime(5862):java.lang。RuntimeException:無法在未調用Looper.prepare() – AZorrozua

0

該類不需要從Activity擴展,但是您需要以某種方式將它傳遞給上下文才能使用。這可以是一個活動上下文或應用程序上下文。

只要確保它不會永遠保留在上下文中。

3

吐司只需要使用上下文來顯示。所有你需要做的就是將Context傳遞給這個類,這一切都會好起來的。我一直都在爲我所有的習慣課程做這個。如果你可以分享你如何在構造函數中實現/調用這個傳遞的上下文,我們可以幫助指出。

基本上,它是這樣的:

public MyClass{ 
    private Context context; 
    public MyClass(Context context){ 
     this.context = context; 
    } 
    private void alert(String msg){ 
     Toast.makeText(this.context, msg, Toast.LENGTH_LONG).show(); 
    } 
} 

現在,你想要做的是檢查是否這種情況下是否有效,當你進入它。有很多情況下,我不小心使用getBaseContext而不是getApplicationContext並導致問題。但事實上,你可以傳遞你的活動,並把它作爲上下文沒有任何問題。

+0

的線程內創建處理程序我試過這種方式,但出現運行時錯誤。 您可以在第一篇文章中看到代碼。 – AZorrozua

+0

你正在吠叫錯誤的樹。該錯誤消息指出您正在從非UI線程調用Toast.show()。我希望你實際上是用某種方法做toast.show(),而不是直接在類中。我想你可能有一個線程或者GameController是一個線程/ runnable本身。這將解釋錯誤。如果你將toast.show()移到構造函數中並且仍然出錯,那麼就我所知,我的猜測是正確的。也許你在擴展的類或線程內部有runOnUIThread方法。試着檢查一下。 – RobGThai

+0

是的,我想在非UI **類**中調用toast.show(),但不是在不同的線程中調用toast.show()。 實際上,我在我的主(和UI)類中創建了一個GameController實例,這就是啓動線程的原因。然後,當GameController的實例完成他的工作並需要它時,它會創建一個敬酒和展示。有錯誤。 – AZorrozua

0

試試這個它爲我工作

在你的活動

上下文的背景下=新yourclass()getAndSetMyContext(Activity.this)。你的類 private static Context c;

public Context getAndSetMyContext(Context c) { 
    this.c = c; 
    return this.c; 
} 

方法中,你需要的只是多士使用

Toast.makeText(C,消息,Toast.LENGTH_SHORT).show();