无法在Android中显示Toast

时间:2015-08-04 18:52:00

标签: android toast

我希望在调用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();
}

但它没有表现出祝酒。

5 个答案:

答案 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();
}

}