Как удалить несколько представлений из оконного менеджера в Android?

Я работаю над приложением Caller ID, где я показываю информацию о набранном/полученном номере в представлении оконного менеджера. Пользователь может вручную закрыть представление. Все шло хорошо, пока я не протестировал его в службе ожидания вызова. Представление об ожидающем вызове остается на экране даже после нажатия кнопки закрытия и отображения ошибки «Вид не подключен к диспетчеру окон». Я делаю все эти вещи из службы.

Мой вопрос в том, есть ли способ удалить несколько просмотров одним щелчком мыши. или Могу ли я отслеживать представления, прикрепленные к оконному менеджеру.

Вот мой код

linearLayout = new LinearLayout(this);
    linearLayout.addView(textHeaderName);
    linearLayout.addView(textheader);
    linearLayout.addView(chatHead);
    linearLayout.addView(textfooter);
    linearLayout.setOrientation(LinearLayout.VERTICAL);

    btnClose.setImageResource(R.drawable.button_close);
    btnClose.setLeft(0);
    chatHead.setBackgroundResource(R.drawable.img);

android.view.WindowManager.LayoutParams layoutparams = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSPARENT);
    android.view.WindowManager.LayoutParams layoutparams1 = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSPARENT);
    android.view.WindowManager.LayoutParams layoutparams2 = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSPARENT);
    final android.view.WindowManager.LayoutParams paramsChatHead = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSPARENT);
    android.view.WindowManager.LayoutParams layoutparams3 = new android.view.WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSPARENT);

    new android.widget.LinearLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);

    layoutparams.gravity = 53;
    layoutparams.y = 0;
    layoutparams1.gravity = 49;
    layoutparams1.x = 0;
    layoutparams1.y = 0;
    layoutparams2.gravity = 49;
    layoutparams2.x = 0;
    layoutparams2.y = 25;
    paramsChatHead.gravity = 49;
    paramsChatHead.x = 0;
    paramsChatHead.y = 50;
    layoutparams3.gravity = 49;
    layoutparams3.x = 0;
    layoutparams3.y = imgheight + 50;

    try 
    {
        windowManager.addView(linearLayout, layoutparams1);
        windowManager.addView(btnClose, layoutparams);

    } catch (Exception e) 
    {}

Закрыть событие:

btnClose.setOnClickListener(new android.view.View.OnClickListener() 
    {
        public void onClick(View view)
        {
            try
            {
                if (linearLayout != null)
                {
                    windowManager.removeView(linearLayout);
                }
                if (btnClose != null)
                {
                    windowManager.removeView(btnClose);
                }
            } catch (Exception e) 
            {
                e.printStackTrace();
            }
        }     
    });

Пожалуйста помоги


person swappy    schedule 02.04.2015    source источник
comment
предположим, что произойдет, если оба linearLayout и btnClose равны NOT NULL   -  person R9J    schedule 02.04.2015
comment
Если оба значения не равны нулю, то после набора номера на экране отображается окно, в котором должны отображаться вызывающий номер, имя и другая информация.   -  person swappy    schedule 02.04.2015


Ответы (1)


используйте это условие:

 if (linearLayout.getWindowToken() != null) {
                                    windowManager.removeView(linearLayout);
                                }
person Mehdi Azadi    schedule 22.05.2017