2013-04-17 99 views
5

我有一個自定義的listview項目,其中包含一個'刪除'按鈕。我創建了一個名爲LazyListAdapter的自定義適配器,該適配器擴展了BaseAdapter。裏面,我重寫我設置按鈕的onclick方法如下getView方法:從自定義適配器內的ListView中刪除項目

@Override 
public View getView(final int pos, View convertView, ViewGroup parent) { 

    View v = convertView; 

    // Some other things... 

    ImageButton removeFav = (ImageButton) v.findViewById(R.id.removeFavorites); 

    removeFav.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

      // I delete the object from Parse database here, 
      // Therefore I want the view to disappear here 
    } 
} 

如何刪除或以某種方式隱藏使用這種方法的onclick裏面的代碼對應的視圖?還是應該改變我的方法?

非常感謝你提前。

+2

呼叫'notifyDataSetChanged()')'; –

+0

列表中有多少項?您可能需要考慮重新使用視圖 –

+0

平均而言,我不會有超過20-30個視圖,但它會從一個用戶變爲另一個用戶。我不知道如何重用這些觀點。 – ecem

回答

7

嘗試此

@Override 
public View getView(final int pos, View convertView, ViewGroup parent) { 

    View v = convertView; 

    // Some other things... 

    ImageButton removeFav = (ImageButton) v.findViewById(R.id.removeFavorites); 

    removeFav.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     // After you delete the object from Parse database here, 
     notifyDataSetChanged(); 

    } 
} 
+0

@ecem:請說明你想在這裏做什麼編輯。這是一個很好的做法,每當你做一個編輯,請在那裏留下一個註釋。 – Ankit

+0

我只更改了間距,以便代碼對未來的訪問者更具可讀性。而已。 – ecem

+0

這是正常的嗎?我的意思是,我也想顯示典型的確認信息(你確定,是/否)。我應該將該代碼放入適配器嗎?謝謝。 @Ankit – Ricardo

0

嘗試使用parent.removeViewAt(位置)。

+0

這是我在使用你的答案時得到的錯誤,''java.lang.UnsupportedOperationException:removeViewAt(int)在AdapterView中不受支持' – ArtiomLK

0

只需可以去除getview方法內的項目如在`的onClick(該示例

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 

    if (convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.list_row, null, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.img = (ImageView) convertView.findViewById(R.id.img); 
     convertView.setTag(viewHolder); 

    } else { 
     // we call the view created before to not create a view in each time 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    final int imgId = imageId.get(position); 

    viewHolder.img.setImageResource(imgId); 

    viewHolder.img.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(context, "Clicked " + imgId, Toast.LENGTH_SHORT) 
        .show(); 
     } 
    }); 

    // Create a generic swipe-to-dismiss touch listener. 
    viewHolder.img.setOnTouchListener(new SwipeDismissTouchListener(
      viewHolder.img, null, 
      new SwipeDismissTouchListener.DismissCallbacks() { 
       @Override 
       public boolean canDismiss(Object token) { 
        return true; 
       } 

       @Override 
       public void onDismiss(View view, Object token) { 

        Log.d(TAG, "Image ıd" + imgId); 


        imageId.remove(position); 
        remove(position); 

        notifyDataSetChanged(); 
       } 
      })); 

    return convertView; 
} 
相關問題