2013-04-17 70 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; 
} 
相关问题