将 Activity 上下文传递给 Toast 的处理程序(片段)
Passing Activity Context to Handler(fragment) for Toast
我正在尝试在处理程序片段中使用 Toast 消息 class 但我无法访问主 class' 上下文。处理程序与主要 activity、PlayFrets(也是 UI 线程)在同一个 class 中。我在 Whosebug 上阅读了关于这个主题的大量问题,但是几乎每个解决方案都涉及将 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(){}
将主要 activity 的上下文传递到处理程序片段以用于 Toast 消息的正确方法是什么?
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{
}
}
};
我正在尝试在处理程序片段中使用 Toast 消息 class 但我无法访问主 class' 上下文。处理程序与主要 activity、PlayFrets(也是 UI 线程)在同一个 class 中。我在 Whosebug 上阅读了关于这个主题的大量问题,但是几乎每个解决方案都涉及将 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(){}
将主要 activity 的上下文传递到处理程序片段以用于 Toast 消息的正确方法是什么?
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{
}
}
};