view not attached to windows manager与This Toast was not created with Toast.makeText()

http://blog.sina.com.cn/s/blog_474928c90100x871.html

public class Ex04_1Activity extends Activity {

EditText editText;

TextView textView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

editText = (EditText) findViewById(R.id.myEditText);

textView = (TextView) findViewById(R.id.myTextView);

editText.setOnKeyListener(new OnKeyListener() {

@Override

public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

textView.setText(editText.getText());

Toast toast = new Toast(Ex04_1Activity.this);

toast.setView(textView);//错误1

toast.show();

return false;

}

});

}

}

错误1的地方会报view not attached to windows manager的错误。根据错误提示,将代码改为如下就可行了:

@Override

public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

textView.setText(editText.getText());

Toast toast = new Toast(Ex04_1Activity.this);

TextView textView1 = new TextView(Ex04_1Activity.this);

textView1.setText(textView.getText());

toast.setView(textView1);

toast.show();

return false;

}

由此分析,以findViewById形式生成的View,new Toast()这种方式是拿不到的,因为初始程序还会报告一个FindViewLocked的错误。

为了进一步证明我的猜想,将代码改成如下形式:

public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

textView.setText(editText.getText());

Toast.makeText(Ex04_1Activity.this, editText.getText(), 1).show();

return false;

}

程序又一次通过了。

再次改一下代码:

public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

textView.setText(editText.getText());

Toast toast = new Toast(Ex04_1Activity.this);

toast.setText(editText.getText().toString());

toast.show();

return false;

}

这时又报了一个:This Toast was not created with Toast.makeText()的错误。

由此可见,Toast.makeText()生成的Toast可以访问findViewById方式生成的View,而自己New Toast()的方式生成的Toast只能访问同样new 出来的View对象。原因大概是在.xml中生成的View对象可以被多个Activity引用,Android为了安全起见,就将其上了锁,并且提供唯一的Toast方式,Toast.makeText()来实现吐丝,这一点和单例模式颇有共同之处

view not attached to windows manager与This Toast was not created with Toast.makeText()

时间: 2024-09-28 04:09:15

view not attached to windows manager与This Toast was not created with Toast.makeText()的相关文章

java.lang.IllegalArgumentException: View not attached to window manager

公司项目线上bug: java.lang.IllegalArgumentException: View not attached to window manager at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:406) at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:308) at androi

decorview that was originally added here or java.lang.IllegalArgumentException: View not attached to window manager

使用Dialog的时候,没少出现下面这两个报错 12-11 17:47:49.776: E/WindowManager(11461): android.view.WindowLeaked: Activity TestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42204800 V.E..... R.....I. 0,0-640,164} that was originally

关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析

在跑Monkey测试的时候出现了一个比较特别的问题,先来看看Log: 1 // CRASH: com.meizu.media.painter (pid 12491) 2 3 // Short Msg: java.lang.IllegalArgumentException 4 5 // Long Msg: java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{2

Android监听view的attached或detached状态

我们在开发中,希望监听View的attached或detached状态,来进行比如eventbus的注册与解注册的操作,非常的方便实用. 可以使用系统给我们提供的listener,代码使用如下: mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { EventBus.getDefault

bug_android.view.WindowManager$BadTokenException: Unable to add window -- token

========5 java.lang.IllegalArgumentException: View not attached to window manager at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:653) at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:349) at android.view.Wi

Android Window PhoneWindow Activity学习心得--第三弹

Android Window  PhoneWindow Activity学习心得--第三弹 前面 我们完成了从Activity到PhoneWindow的整体跨度 正如我们所知道的与Activity组件关联的一个应用程序窗口视图对象关联一个ViewRoot对象,而将 一个Activity组件的应用程序窗口视图对象与一个ViewRoot对象关联是通过该Activity组件所使用的 窗口管理器(WindowManager)来执行的. 在我们初始化DecorView完成之后,我们需要关联应用程序窗口视图

Android Configuration change引发的问题及解决方法(转)

之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什么影响都没什么了解.见到的次数多了,总是掠过去心理总觉得不踏实,最终还是好好看了些介绍Congifuration Change的blog,在此做个梳理也不枉花了那么多时间.有疏漏和描述不准确的地方恳请指正. 前言 在研究Configuration Change之前我主要的疑问: 横竖屏切换对布局有影

探讨:你真的会用Android的Dialog吗?

一个Bug前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的: 复制代码代码如下: java.lang.IllegalArgumentException: View not attached to window manager    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356)    at android.view.WindowManagerImpl.rem

Android实战技巧:Dialog (转)

转:http://blog.csdn.net/hitlion2008/article/details/7567549#t0 Dialog是任何系统都必须有的一个控件,作为辅助窗口,用于显示一些消息,或请求用户采取一引起操作等. 在Android中也不例外,基本使用可能参看文档. 使用时的注意事项 1. BACK键能取消掉对话框(dismiss),但是却不会触发其onOkey和onCancel回调接口,所以如果你的对话框会改某些状态,一定要注意还有第三种方式取消对话框. 2. 尽量少用模态对话框(