Android - getBaseContext使用Toast vs. Dialog

时间:2014-01-28 17:07:07

标签: android android-dialog android-toast

我正在应用程序之外显示一个吐司。

我和Toast合作很好:

  Toast.makeText(getBaseContext(),"Text").show();

但是当我尝试使用Dialog时,我会返回一个

        final Dialog dialog_edu = new Dialog(getBaseContext());
        dialog_edu.setTitle("Choose Action");       
        dialog_edu.show();

它返回:

 01-28 18:02:04.734: W/WindowManager(329): Attempted to add window with non-application token WindowToken{41c01dd8 token=null}.  Aborting.
 01-28 18:02:04.734: E/AndroidRuntime(2626): FATAL EXCEPTION: main
 01-28 18:02:04.734: E/AndroidRuntime(2626): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

如果我使用“MyAcitivity.this”作为上下文,它在应用程序中工作,但不是在我出去申请时。另一方面,Toast在应用程序内部和外部工作。

我已经读过,您可以使用:getActivity()和其他,但在当前状态下它会返回相同的错误。

如果我使用处理程序并尝试延迟对话框的构建,则对1秒的延迟时间没有影响。

那么我如何让Dialog在应用程序内外工作。

3 个答案:

答案 0 :(得分:0)

您可能遗失()。所以它就像是,

final Dialog dialog_edu = new Dialog(getBaseContext());

答案 1 :(得分:0)

使用getParent()而不是getBaseContext()。

否则,请使用如下。因为这个问题是一个时间问题。

Context context = getBaseContext(); 新的Dialog(上下文);

尝试以上两种方式。 : - )

答案 2 :(得分:0)

  

那么我如何让Dialog在应用程序内外工作。

您创建一个以对话为主题的活动。

您无法在具有任何旧上下文的活动之外显示标准对话框。虽然对话框构造函数只需要一个Context,但实际上它需要一个Activity,大概是为了将自己附加到Activity的窗口。 Toast没有此限制,因此您可以使用任何Context。