2011-12-23 131 views
0

删除项目我有包含若干文本,删除按钮等各行的列表视图。 当删除按钮被按下时,该行必须被删除。Android的问题列表视图从

我使用的是基础适配器和有哪些的项目将显示一个全局列表。

请参考下面

public class JobCartListAdapter extends BaseAdapter { 

    protected LayoutInflater mInflater; 
    public JobCartListAdapter(Context mContext) { 
     super(); 

     this.mContext = mContext; 
     mInflater = LayoutInflater.from(mContext); 
    } 

    Context mContext; 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return JobsManager.JobsCartList.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

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

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.job_cart_row, null); 
      holder = new ViewHolder(); 
      holder.text1 = (TextView) convertView.findViewById(R.id.title); 
      holder.delete = (ImageButton)convertView.findViewById(R.id.delete); 
      holder.delete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.i("Remove from" , "" + position); 
        JobsManager.JobsCartList.remove(position) ; 
        notifyDataSetChanged(); 
       } 
      }); 
      convertView.setTag(holder); 
     } else { 

      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.text1.setText(JobsManager.JobsCartList.get(position).getTitle()); 
     return convertView; 
    } 

    static class ViewHolder { 
     TextView text1; 
     ImageButton delete; 
    } 
} 

问题我面对我的adpater代码:

  1. 当我按下DELET的firstime,在列表中的位置是正确的,该项目是删除列表刷新得到

  2. 当我在刷新列表中再次行上点击,传递给getview对应的位置是不正确的。所以它导致索引超出界限的异常,因为该位置被用作列表的索引。我检查了我的清单,并在添加和删除时正确更新了清单。 它与列表适配器的问题。与notifystatechanged的号召,单击某一行时显示的列表刷新后,返回的行现在的位置是不正确的。

请帮助

回答

1

您不必删除视图只是删除通过adapter.remove(adapter.getItem(position)); 的涉及对象会从列表中删除指定的对象&调用方法notifyDatasetChanged()

+0

u能PLS解释这个“适配器”实际上的含义。我没有看到为基础适配器 – png 2011-12-23 11:34:30

+0

对不起preetha我的错误其实你converview得到重用和删除情况onclicklistener任何这样的功能是抱着旧的位置,所以做的标记删除,比如'delete.setTag(位置+“”)按钮一件事设置位置;'&中点击收听获得按钮该标签&也别删除getview如果converview不为空,然后从中提取converView&设置标签删除按钮再次 – 2011-12-23 11:59:53

+0

是,这个问题是由于重用converview。我改变了这一点,以免重复使用,因为这似乎更容易。非常感谢。 – png 2011-12-23 12:22:54