我试图在处理程序片段类中使用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消息中使用的正确方法是什么?
答案 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{
}
}
};