2017-10-06 93 views
0

好日子,列表视图不刷新值=真

我正在做一个列表视图,baseadapter使用复选框即能删除多个选定的行。

这里是我的onCreate:

ArrayList<Memos> list; 

list = new ArrayList<Memos>(); 
list.add(new Memos(1, "s", "s")); 
list.add(new Memos(2, "x", "aaa")); 
list.add(new Memos(3, "v", "aesf")); 

final ListView lv = (ListView) findViewById(R.id.myList); 
lv.setAdapter(new MemoListAdapter(list, this)); 

deletebutton 
@Override 
     public void onClick(View v) { 
      MemoListAdapter myAdapter = (MemoListAdapter)lv.getAdapter(); 
      myAdapter.remove(); 
     } 

那么这里就是我的完整baseadapter:

 public class MemoListAdapter extends BaseAdapter { 
    private List<Memos> listComment; 
    private Context context; 
    private LayoutInflater inflater = null; 
    private ArrayList<Memos> deleteMemos; 

    public MemoListAdapter(List<Memos> listComment, Context context) { 
     super(); 
     this.listComment = listComment; 
     this.context = context; 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     deleteMemos = new ArrayList<Memos>(); 
    } 

    @Override 
    public int getCount() { 

     return listComment.size(); 
    } 

    @Override 
    public Memos getItem(int position) { 
     return listComment.get(position); 
    } 

    @Override 
    public long getItemId(int arg0) { 
     return 0; 
    } 

    @Override 
    public int getViewTypeCount() { 

    return getCount(); 
    } 

    @Override 
    public int getItemViewType(int position) { 

    return position; 
    } 

    public class ViewHolder 
    { 
     TextView body; 
     TextView date; 
     CheckBox checkBox; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.list_view, null); 
      holder = new ViewHolder(); 
      holder.body = (TextView) convertView.findViewById(R.id.big_text); 
      holder.date = (TextView) convertView.findViewById(R.id.small_text); 
      holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox); 
      holder.body.setText(listComment.get(position).getMessageBody()); 
      holder.date.setText(listComment.get(position).getMessageDate()); 

      holder.checkBox.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
          //is chkIos checked? 
        if(listComment.get(position).isCheckbox()) { 
        holder.checkBox.setChecked(false); 
        deleteMemos.remove(listComment.get(position)); 
        } 
        else { 
         // Do invisible or gone stuff here 
        holder.checkBox.setChecked(true); 
        deleteMemos.add(listComment.get(position)); 
        } 

       } 
       }); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     return convertView; 
    } 

    public void remove() { 

     for(Memos memo : deleteMemos) { 
      listComment.remove(memo); 
     } 
     this.notifyDataSetChanged(); 
    } 
    } 

选择要删除的行(4行)

enter image description here

名单后调整但是复选框i的内容和检查值还是一样的。

enter image description here

我想知道什么notifyDataSetChanged的一部分是错误的。 在此先感谢!

+0

移动你的'this.notifyDataSetChanged();''以下listComment.remove(备忘录);',在for循环中。 – Stanojkovic

+0

@Stanojkovic,可悲的是,它仍然不起作用:( –

回答

1

您的意见被重复使用,这就是它发生的原因。尝试添加以下代码到你的getView()

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.list_view, null); 
      holder = new ViewHolder(); 
      holder.body = (TextView) convertView.findViewById(R.id.big_text); 
      holder.date = (TextView) convertView.findViewById(R.id.small_text); 
      holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     if(listComment.get(position).isCheckbox()) { 
      holder.checkBox.setChecked(true); 
     }else { 
      holder.checkBox.setChecked(false); 
     } 

     holder.body.setText(listComment.get(position).getMessageBody()); 


     holder.date.setText(listComment.get(position).getMessageDate()); 
     holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
       listComment.get(position).setIsCheckbox(isChecked); 
       if (isChecked){ 
        deleteMemos.add(listComment.get(position)); 
       }else{ 
        deleteMemos.remove(listComment.get(position)); 
       } 
      } 

     }); 

     return convertView; 
    } 
+0

可悲的是,它不起作用:( 复选框重置...但listrow只调整,并没有删除删除正确的项目。 ( –

+0

我编辑了我的答案,请使用这个 –

+0

是的,它现在工作完美! 非常感谢你mucH! –