2012-10-24 52 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()应该做的工作参数传递给类和具有本地上下文对象。让我知道,如果它失败