将活动上下文传递给Toast的Handler(片段)

时间:2015-03-10 20:20:35

标签: android-fragments handler android-context android-toast

我试图在处理程序片段类中使用Toast消息,但我无法访问主类'上下文。处理程序与主要活动PlayFrets(也是UI线程)在同一个类中。我已经在stackoverflow上阅读了关于此主题的大量问题,但几乎每个解决方案都涉及传递getActivity()或getActivity ().getApplicationContext()进入Toast的上下文字段。当我尝试这个时,我得到错误

以下是相关代码:

public class PlayFrets extends Activity {
. 
.
.
    static Handler mHandler = new Handler(Looper.getMainLooper()){  
        public void handleMessage(final Message msg){ 
            if(msg.obj != null){                
                runOnUiThread(new Runnable() {
                   public void run() {
                   //error happens here on Toast message
                       Toast.makeText(getActivity(), "Background Thread sent "+  msg.what + " bytes: " + msg.obj,Toast.LENGTH_SHORT).show();
                    }
                });
            }
            else{
            }
        }
    };
}

这些是我尝试传递上下文和每个变体产生的错误。

Toast.makeText(PlayFrets.this.getActivity()...)

^^^方法getActivity()未定义类型PlayFrets

Toast.makeText(PlayFrets.this...) 

^^^在范围

中无法访问PlayFrets类型的封闭实例
 Toast.makeText(getActivity().getApplicationContext()...)

^^^方法getActivity()未定义类型new Runnable(){}

将主要活动的上下文传递到处理程序片段以在Toast消息中使用的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

Activity本身就是一个背景。而不是你尝试的所有事情

  • 没有创建static处理程序 - 这就是您尝试通过PlayFrets.this失败的原因
  • PlayFrets.this作为上下文传递
  • 无需调用runOnUiThread()因为处理程序在呈现的情况下处理UI线程上的消息

您的处理程序代码应如下所示:

Handler mHandler = new Handler() {  
    public void handleMessage(final Message msg){ 
        if(msg.obj != null){
                   Toast.makeText(PlayFrets.this, "Background Thread sent "+  msg.what + " bytes: " + msg.obj,Toast.LENGTH_SHORT).show();
        }
        else{
        }
    }
};