2015-01-21 3 views
0

Я хочу отобразить listview в windowmanager.android добавить ListView в windowmanager, не удается удалить последний элемент

Добавить listview в windowmanager. У меня есть оверлей на экране, тогда, когда вы добавляете, редактируете, удаляете элемент, я буду работать только с адаптером и notifydatasetchanged().

Но я получаю проблему, когда удаляю последний элемент, я видел журнал, который удаляет успех, но ЭТОТ ДЕТАЛЬ ВСЕ ЕЩЕ РАЗНОЕ В DESKTOP, хотя я удаляю Listview из windowmanager, я не знаю, почему это так?

вот мой код:

Добавить ListView:

private void addNotificationView(final Context context) { 
     if (windowManager == null) 
      windowManager = (WindowManager) context 
        .getSystemService(Context.WINDOW_SERVICE); 

     // NotificationView[messageNumber] = 
     // LayoutInflater.from(context).inflate(
     // R.layout.fr_alert, null); 
     lv = new ListView(context); 
     if (messageNumber == 0) { 
      lv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
        LayoutParams.WRAP_CONTENT)); 
      lv.requestLayout(); 
      lv.setBackgroundColor(Color.BLACK); 
      data.add(messageNumber + " <(^OO^)>"); 
      adapter = new NotifyView(context, data); 
      lv.setAdapter(adapter); 
     } else { 
      data.add(messageNumber + " <(^OO^)>"); 
      adapter.notifyDataSetChanged(); 
     } 
     params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSPARENT); 

     params.gravity = Gravity.TOP; 
     // | Gravity.FILL_HORIZONTAL; 
     params.x = 0; 
     params.y = 0; 
     // Logger.error("y asix: " + (messageNumber * notifyHeight)); 
     // 
     ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) 
       .addView(lv, params); 
     messageNumber++; 
     Logger.error("Added View"); 
    } 

адаптер:

 @Override 
     public android.view.View getView(final int pos, 
       android.view.View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      if (convertView == null) 
       convertView = LayoutInflater.from(mContext).inflate(
         R.layout.fr_alert, parent, false); 

      LinearLayout lnl = (LinearLayout) convertView 
        .findViewById(R.id.bgTextContent); 
      lnl.setBackgroundColor(Color.parseColor("#000000")); 
      lnl.setAlpha((float) 0.9); 
      TextView tv = (TextView) convertView.findViewById(R.id.tvContent); 
      tv.setText("<(^OO^)> " + data.get(pos)); 
      tv.setTextColor(Color.WHITE); 
      TextView tvDelete = (TextView) convertView 
        .findViewById(R.id.tvDelete); 

      tvDelete.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
        if (adapter.getCount() != 1) { 
         data.remove(pos); 
         adapter.notifyDataSetChanged(); 
        } else { 
         // adapter = null; 
         messageNumber = 0; 
         destroynotification(mContext); 
        } 
       } 
      }); 
      return convertView; 
     } 

Тогда, когда размер адаптера = 0. Я удалить ListView, но это не woring тоже: (

private void destroynotification(Context context) { 
     if (lv != null) { 
      ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) 
        .removeView(lv); 
      Logger.error("Removed View, mess number = " + messageNumber); 
     } 
    } 

Пожалуйста, посмотрите изображение, я нажал, чтобы удалить последний элемент, в журнале отображается метод destroyNotication(). . Но этот пункт еще показать здесь :( enter image description here

+0

, когда вы добавляете listview в windowmanager? –

+0

когда первый раз (count = 0) Я создаю listview и добавляю в windowmanager. после того, как я только добавлю данные в адаптер и вызову метод Notifydatasetchanged(). См. Мой код обновления. – kemdo

ответ

1

здесь вы создаете новый ListView каждый раз,

lv = new ListView(context); 
     if (messageNumber == 0) { 
      lv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
        LayoutParams.WRAP_CONTENT)); 
      lv.requestLayout(); 
      lv.setBackgroundColor(Color.BLACK); 
      data.add(messageNumber + " <(^OO^)>"); 
      adapter = new NotifyView(context, data); 
      lv.setAdapter(adapter); 
     } else { 
      data.add(messageNumber + " <(^OO^)>"); 
      adapter.notifyDataSetChanged(); 
     } 

изменения к этому:

if (messageNumber == 0) { 
lv = new ListView(context); 
      lv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
        LayoutParams.WRAP_CONTENT)); 
      lv.requestLayout(); 
      lv.setBackgroundColor(Color.BLACK); 
      data.add(messageNumber + " <(^OO^)>"); 
      adapter = new NotifyView(context, data); 
      lv.setAdapter(adapter); 
     } else { 
      data.add(messageNumber + " <(^OO^)>"); 
      adapter.notifyDataSetChanged(); 
     } 

означает создать один вид списка и добавить элементы для просмотра списка, если вы хотите удалить список, используйте свой код.

private void destroynotification(Context context) { 
     if (lv != null) { 
      ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) 
        .removeView(lv); 
      Logger.error("Removed View, mess number = " + messageNumber); 
     } 
    } 

ЗАКЛЮЧЕНИЕ: Вы создаете один вид списка и добавляете его в оконный менеджер. но вы удаляете другой вид из диспетчера окон, что является проблемой.

+0

, что именно решение, спасибо вам ~. ~, Я хочу обнять вас много времени .... – kemdo