我希望在调用toast()
时显示Toast,但它没有显示Toast。
这是我的代码:
void callcalltoast() {
...
calltoast();
...
}
void calltoast() {
...
toast();
...
}
void toast() {
Log.i("LOG", "this is toast");
Toast.makeText(getBaseContext(),"this is toast",
Toast.LENGTH_SHORT).show();
}
我在其他两个函数中调用toast:
首先致电callcalltoast()
然后calltoast()
,然后致电toast()
这是日志:
08-04 14:47:34.390: I/LOG(1796): this is toast
08-04 14:47:34.430: I/Choreographer(1796): Skipped 90 frames! The application may be doing too much work on its main thread.
08-04 14:47:34.451: W/InputMethodManagerService(285): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41a1c750 attribute=null, token = android.os.BinderProxy@419ff990
我已使用此测试:
void toast() {
Log.i("LOG", "this is toast");
Toast.makeText(getApplicationContext(),"this is toast",
Toast.LENGTH_SHORT).show();
}
此
void toast() {
Log.i("LOG", "this is toast");
Toast.makeText(this,"this is toast",
Toast.LENGTH_SHORT).show();
}
和
void toast() {
Log.i("LOG", "this is toast");
Toast.makeText(MainActivity.this,"this is toast",
Toast.LENGTH_SHORT).show();
}
但它没有表现出祝酒。
答案 0 :(得分:2)
请勿致电getBaseContext()
。如果您在“活动”中,只需将this
作为上下文传递,或者您可以使用getApplicationContext()
获取一个
答案 1 :(得分:1)
使用此代码:
public enum Toaster {
INSTANCE;
private final Handler handler = new Handler(Looper.getMainLooper());
public void postMessage(Context context, final String message) {
handler.post(
new Runnable() {
@Override
public void run() {
Toast.makeText(context, message, Toast.LENGTH_SHORT)
.show();
}
}
);
}
}
然后这个:
Toaster.INSTANCE.postMessage(this, "this is toast");
它应该从任何线程以这种方式工作。通常我只有ApplicationContext的单例持有者,我会将其作为参数提供。
答案 2 :(得分:1)
你可以做的是将Context传递给下面的函数
void toast(Context context) {
Log.i("LOG", "this is toast");
Toast.makeText(context,"this is toast",
Toast.LENGTH_SHORT).show();
}
用于调用此函数只需编写
这是在活动中调用它时
toast(Your_Activity_Name.this);
在你的情况下,它将如下所示
toast(MainActivity .this);
如果你在片段中使用它,那么
toast(getActivity());
"跳过90帧!"可能的可能是你在模拟器上测试你的应用程序,如果是,那么不要担心。如果您在真实设备上进行测试,那么此日志不是因为显示而是因为您的其他代码。
答案 3 :(得分:1)
使用此代码
你可以在活动创建时声明全局变量Context context;
和context=MainActivity.this;
然后当你调用toast时你可以使用像toast(context);
这样的上下文
public class MainActivity extends ActionBarActivity {
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
context=MainActivity.this;
callcalltoast();
...
}
void callcalltoast() {
...
calltoast();
...
}
void calltoast() {
...
toast(context);
...
}
void toast(Context context) {
Log.i("LOG", "this is toast");
Toast.makeText(context,"this is toast",
Toast.LENGTH_SHORT).show();
}
}
答案 4 :(得分:0)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callcall();
}
private void callcall() {
.....
calltoast();
.....
}
private void calltoast() {
.....
toast();
.....
}
private void toast(){
Toast.makeText(getApplicationContext(),"message",Toast.LENGTH_SHORT).show();
}
}