2012-10-24 87 views
0

我想在靜態類中顯示Toast消息,但這是Toast消息參數傳遞應用程序上下文的問題。請幫助我,如何在靜態類中顯示Toast消息。請推薦我需要做的改變,我會非常感謝你。這是我的代碼的一部分。Android中的Toast消息參數問題

public class MainActivity extends Activity { 
     public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.training_four_position); 
      mEndlessRunnable = (Runnable) new UpdateRunnable(); 
      mEndlessRunnable.run(); 
    } 


    private static class UpdateRunnable implements Runnable { 
    private int mState; 

    public UpdateRunnable(Handler handler, Button[] buttons) { 
     mHandler = handler; 
     mButtons = buttons; 
    } 

    public void run() { 
     switch (mState) { 
     case 0: 
       mState = 1; 
       break; 
     case 1: 

      mState = 0; 
       // Here is the issue in my toast message 
       Toast.makeText(CONTEXT, "Toast message.",Toast.LENGTH_LONG).show(); 
       break; 
    } 

    mHandler.postDelayed(this,1000)); 

    }// End of run() 
    }//End of class UpdateRunnable 
    } //End of MainActivity 

回答

1

你可以嘗試做一個單獨的方法爲你乾杯

public void showToast(String message){ 

    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 

}//end showToast 

然後在你的內部類中調用它。

+0

大聲笑...如果此功能在活動範圍內,那麼它應該是靜態的,這樣內部類可以訪問它,然後你不能使用getApplicati onContext()在一個靜態函數中...如果它在靜態內部類然後再次相同的問題,你不能在靜態內部類中使用getApplicationContext .. – Farhan

+0

aha ok ...:/ 如何擴展你的內部類與活動類,然後在你的構造函數中添加上下文? mEndlessRunnable =(Runnable)new UpdateRunnable(MainActivity.this); – BNY

+0

如果您在構造函數中添加上下文,則使用Activity進行擴展是沒有用的... – Farhan

1

你可以通過你的活動的背景下,以你的UpdateRunnable類的構造函數,並用它然後在您的run()函數。

但是,如果您從內部類顯示Toast,那麼該內部類可能根本不應該是靜態類。您可以刪除static關鍵字,然後在run()中使用您的Activity的getContext()。

爲什麼你想要你的內部類是靜態的?

+0

我認爲它好,使內部類靜態到避免memoryleaks等.. – Farhan

+1

@Farhan沒有在這種情況下真的,因爲這個類將使用一個特定的上下文無論如何有一個依賴於它的外部類 –

+0

是啊,我只是說,通常它的好...有時你做一個對象像textview和其他東西在內部類...我不知道的細節,但正如我說我讀的地方... :) – Farhan

0

嗯,其中一種方法是在您的活動中使用靜態變量。

public static Context myContext;

那麼的onCreate更新..

onCreate() 
{ 
    myContext = getApplicationContext(); 
} 

另一種方式是通過上下文在類的構造函數...

0

我猜的getParent()或getApplicationContext()應該做的工作參數傳遞給類和具有本地上下文對象。讓我知道,如果它失敗