Android removeView(mView)抛出一个illegalArgumentException

Android removeView(mView)抛出一个illegalArgumentException,android,view,overlay,illegalargumentexception,Android,View,Overlay,Illegalargumentexception,我根据在线教程定义了一个自定义浮动视图组件,但问题是每次调用removeView(),都会出现一个异常,其他部分都可以正常工作,下面是onclick侦听器 followButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageView focusView = new ImageView(getActi

我根据在线教程定义了一个自定义浮动视图组件,但问题是每次调用removeView(),都会出现一个异常,其他部分都可以正常工作,下面是onclick侦听器

  followButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          ImageView focusView = new ImageView(getActivity());
          focusView.setImageResource(R.drawable.follow_me);
          WindowManager.LayoutParams focusParam = new WindowManager.LayoutParams();
          focusParam.type=2002;
          focusParam.format=1;
          focusParam.flags=40;  //default(32)+ FLAG_NOT_FOCUSABLE(8)
          focusParam.width=30;
          focusParam.height=30;
          focusParam.x=0;focusParam.y=0;
          focusParam.setTitle("Load Average");
          WindowManager wm1 = (WindowManager)getActivity().getSystemService(Context.WINDOW_SERVICE);              
            followModeOn=!followModeOn;
            if (followModeOn) {
                  wm1.addView(focusView, focusParam);
            }
            else {
                wm1.removeView(focusView);
            }
        }
    });
以下是错误报告:

01-23 00:06:39.163: E/AndroidRuntime(31651): java.lang.IllegalArgumentException: View=android.widget.ImageView{46586dc0 V.ED.... ......I. 0,0-0,0} not attached to window manager
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:370)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:299)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at study.runtracker.map.OSMFragment$4.onClick(OSMFragment.java:180)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.view.View.performClick(View.java:4438)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.view.View$PerformClick.run(View.java:18422)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.os.Handler.handleCallback(Handler.java:733)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.os.Looper.loop(Looper.java:136)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at android.app.ActivityThread.main(ActivityThread.java:5017)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at 

java.lang.reflect.Method.invokeNative(Native Method)

01-23 00:06:39.163: E/AndroidRuntime(31651):    at java.lang.reflect.Method.invoke(Method.java:515)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-23 00:06:39.163: E/AndroidRuntime(31651):    at dalvik.system.NativeStart.main(Native Method)

这行不通。您正在创建一个新的ImageView每当您收到一个单击时,您都需要保留一个对首先创建的ImageView的引用


每次重新创建时,都无法从视图中删除新视图,因为它从未添加到“父”视图中。

如日志所示,
focusView
尚未连接到WindowManager。您正在创建一个全新的ImageView,然后尝试在附加它之前将其删除

我会尝试保留对focusView的引用,以便您以后可以删除它

View mFocusView = null;

followButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Create the focus view, if not already done
        if (mFocusView == null)
            mFocusView = new ImageView(getActivity());

        mFocusView.setImageResource(R.drawable.follow_me);
        WindowManager.LayoutParams focusParam = new WindowManager.LayoutParams();
        focusParam.type=2002;
        focusParam.format=1;
        focusParam.flags=40;  //default(32)+ FLAG_NOT_FOCUSABLE(8)
        focusParam.width=30;
        focusParam.height=30;
        focusParam.x=0;focusParam.y=0;
        focusParam.setTitle("Load Average");
        WindowManager wm1 = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);

        followModeOn=!followModeOn;
        // This will work as long as followModeOn is false here, the first pass through.
        if (followModeOn) {
            wm1.addView(mFocusView, focusParam);
        }
        else {
            wm1.removeView(mFocusView);
        }
    }
});

谢谢你们的建议,现在我将一个构造函数移出onclick,问题就解决了

      ImageView focusView = new ImageView(getActivity());
        @Override
        public void onClick(View v) {             
          focusView.setImageResource(R.drawable.follow_me);