从ListView中删除项目 [英] removing item from ListView

查看:101
本文介绍了从ListView中删除项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有自定义列表适配器复选框,我想在选中的项目删除列表中的项目。
来到这个片段后删除列表视图的项目时已删除项目回来的列表视图。
当删除所有逐项检查(这个问题点击体内列表视图中不可不点击复选框),选中下一个问题不在一起删除最点击超过一次删除按钮的更多。
任何人帮助我​​,我喜欢。结果
我片段

  listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);    listView.setOnItemClickListener(新OnItemClickListener(){
        @覆盖
        公共无效onItemClick(适配器视图<>母公司,观景,INT位置,长的id){            CHK =(复选框)view.findViewById(R.id.checkBox6);
            chk.toggle();        }
    });
                    按钮BTN =(按钮)view.findViewById(R.id.button1);
    btn.setOnClickListener(新OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            的for(int i = 0; I<则为list.size()/ *这是原始模型* /;我++){               如果(list.get(I).isSelected()==真){
                   adapter.remove(list.get(I));
                }
            }
            adapter.notifyDataSetChanged();        }
    })

listadapter

 公共类ListAdapter延伸BaseAdapter {
私人最终字符串标记=*** *** ListAdapter;
上下文语境;
 LayoutInflater myInflater;
 清单<联系>清单;
    复选框checkBox6;
公共ListAdapter(上下文的背景下){
    超();
    myInflater = LayoutInflater.from(上下文);
    this.context =背景;
    Log.i(TAG,适配器成功setuped。);
}
公共无效删除(联系对象){
    list.remove(对象);
    notifyDataSetChanged();
}
公共无效使用setData(列表<联系>名单){
    this.list =清单;    Log.i(TAG,数据传递给适配器。);
}@覆盖
公众诠释的getCount(){
    返回则为list.size();
}@覆盖
公共对象的getItem(INT位置){
    返回的位置;
}@覆盖
众长getItemId(INT位置){
    返回的位置;
}
@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
    最后ViewHolder持有人;    如果(convertView == NULL){
        convertView = myInflater.inflate(R.layout.list_adapter,NULL);
        持有人=新ViewHolder();
    // holder.tvId =(TextView中)convertView.findViewById(R.id.tvId);
        holder.tvName =(TextView中)convertView.findViewById(R.id.tvName);
        holder.tvPhone =(TextView中)convertView.findViewById(R.id.tvPhone);
        holder.tvnum =(TextView中)convertView.findViewById(R.id.tvnum);
        holder.tvtype =(TextView中)convertView.findViewById(R.id.tvtype);
        holder.tv code =(TextView中)convertView.findViewById(R.id.tv code);
        holder.tvesme =(TextView中)convertView.findViewById(R.id.tvesme);
        holder.checkBox6 =(复选框)convertView.findViewById(R.id.checkBox6);
        holder.checkBox6
          .setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){            @覆盖
            公共无效onCheckedChanged(CompoundButton buttonView,
                布尔器isChecked){
              联系元素=(联系方式)holder.checkBox6.getTag();
              element.setSelected(buttonView.isChecked());
            }
          });
        convertView.setTag(保持器);
        holder.checkBox6.setTag(list.get(位置));    }其他{
        支架=(ViewHolder)convertView.getTag();
        ((ViewHolder)convertView.getTag())checkBox6.setTag(list.get(位置))。
    }
// ViewHolder支架=(ViewHolder)convertView.getTag();
    NumberFormat的格式= NumberFormat.getCurrencyInstance();
// holder.tvId.setTag(list.get(位置).getIdInString());
// holder.tvId.setText(list.get(位置).getIdInString());
    holder.tvName.setText(format.format(list.get(位置).getName()));
    holder.tvPhone.setText(format.format(list.get(位置).getPhoneNumber()));
    holder.tvnum.setText(list.get(位置).getNUM());
    holder.tvtype.setText(list.get(位置).getTYPE());
    holder.tv code.setText(list.get(位置)。获得code());
    holder.tvesme.setText(list.get(位置).getESME());
    holder.checkBox6.setChecked(list.get(位置).isSelected());
    返回convertView;
}
静态类ViewHolder {
// TextView的TVID;
    TextView的tvName;
    TextView的tvPhone;
    TextView的tvnum;
    TextView的tvtype;
    TextView的电视code;
    TextView的tvesme;
    复选框checkBox6;
}
公开名单<联系> getcontac(){
    返回列表;
}
公共无效删除(对象位置){
    list.remove(位置);
}
      }

联系人

 公共类联系{
私人长期身份证;
私人诠释名称;
私人诠释phoneNumber的;
私人字符串NUM;
私人字符串code;
私人字符串埃斯梅;
私人字符串类型;
      选择私人布尔;
公共联系(长ID,INT的名字,诠释phoneNumber的,
        NUM字符串,字符串code,埃斯梅字符串,字符串型){
    this.id = ID;
    this.name =名称;
    this.phoneNumber = phoneNumber的;
    这code = code;
    this.esme =埃斯梅;
    this.type =类型;
    选择= FALSE;
}
众长的getId(){
    返回ID;
}
公共字符串getIdInString(){
    返回Long.toString(ID);
}
公众诠释的getName(){
    返回名称;
}
公共字符串getNameInString(){
    返回Long.toString(名);
      }
公众诠释getPhoneNumber(){
    返回phoneNumber的;
}
公共字符串getPhoneNumberInString(){
    返回Long.toString(phoneNumber的);
}
公共字符串getNUM(){
    返回NUM;
}
公共字符串的GetType(){
    返回类型;
}
公共字符串得到code(){
    返回code;
}
公共字符串getESME(){
    返回埃斯梅;
}
公共无效SETID(长ID){
    this.id = ID;
}
公共无效setname可以(INT名){
    this.name =名称;
}
公共无效setPhoneNumber(INT phoneNumber的){
    this.phoneNumber = phoneNumber的;
}
公共无效setNUM(字符串NUM){
    this.num = NUM​​;
}
公共无效的setType(字符串类型){
    this.type =类型;
}
公共无效设置code(字符串code){
    这code = code;
}
公共无效setESME(字符串埃斯梅){
    this.esme =埃斯梅;
}
  公共布尔isSelected(){
    返回所选择的;
}
  公共无效的setSelected(布尔选择){
    this.selected =选择;
}
      }


解决方案

按照回答有关如何更新方向如果列表视图内容的适配器已被更改。根据这个答案更新您的适配器

 私有类CustomListAdapter扩展ArrayAdapter< CustomModel> {    //你的适配器code这里...    公共无效updateList(列表< CustomModel>名单){        this.list =清单;
        notifyDataSetChanged();    }

和从活动中称其为 yourAdapterInstance.updateList(newListContent)

i have custom list adapter with checkboxes i want to remove list items on checked items . when removing item of listview after coming to this fragment deleted item coming back to the listview. and next problem when checked item( this problem for clicking in body list view not not clicking on checkbox) for deleting all item checked not together deleting most clicking More than once deleting buttons. any person help me i enjoyed.
my fragment

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

    listView.setOnItemClickListener( new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            chk = (CheckBox) view.findViewById(R.id.checkBox6);
            chk.toggle();               

        }
    });
                    Button btn = (Button) view.findViewById(R.id.button1);      
    btn.setOnClickListener( new OnClickListener() {

        @Override
        public void onClick(View v) {
            for (int i = 0; i < list.size()/*this is the original model*/; i++) {

               if(list.get(i).isSelected()==true){  
                   adapter.remove(list.get(i));
                }                  
            }
            adapter.notifyDataSetChanged(); 

        }
    })

listadapter

public class ListAdapter extends BaseAdapter {
private final String TAG = "*** ListAdapter ***";
Context context;
 LayoutInflater myInflater;
 List<contac> list;
    CheckBox checkBox6;
public ListAdapter(Context context) {
    super();
    myInflater = LayoutInflater.from(context);
    this.context = context;
    Log.i(TAG, "Adapter setuped successfully.");
}
public void remove(contac object) {
    list.remove(object);
    notifyDataSetChanged();
}   
public void setData(List<contac> list) {
    this.list = list;

    Log.i(TAG, "Data passed to the adapter.");
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return position;
}

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

    if (convertView == null) {
        convertView     = myInflater.inflate(R.layout.list_adapter, null);
        holder          = new ViewHolder();
    //  holder.tvId     = (TextView) convertView.findViewById(R.id.tvId);
        holder.tvName   = (TextView) convertView.findViewById(R.id.tvName);
        holder.tvPhone  = (TextView) convertView.findViewById(R.id.tvPhone);
        holder.tvnum    = (TextView) convertView.findViewById(R.id.tvnum);
        holder.tvtype   = (TextView) convertView.findViewById(R.id.tvtype);
        holder.tvcode   = (TextView) convertView.findViewById(R.id.tvcode);
        holder.tvesme   = (TextView) convertView.findViewById(R.id.tvesme);
        holder.checkBox6    =  (CheckBox)convertView.findViewById(R.id.checkBox6);  
        holder.checkBox6
          .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
              contac element = (contac) holder.checkBox6.getTag();
              element.setSelected(buttonView.isChecked());
            }
          });
        convertView.setTag(holder);
        holder.checkBox6.setTag(list.get(position));

    } else {
        holder = (ViewHolder) convertView.getTag();
        ((ViewHolder) convertView.getTag()).checkBox6.setTag(list.get(position));
    }
//  ViewHolder  holder = (ViewHolder) convertView.getTag();
    NumberFormat format = NumberFormat.getCurrencyInstance();
//  holder.tvId.setTag(list.get(position).getIdInString());
//  holder.tvId.setText(list.get(position).getIdInString());
    holder.tvName.setText(format.format(list.get(position).getName()));
    holder.tvPhone.setText(format.format(list.get(position).getPhoneNumber()));
    holder.tvnum.setText(list.get(position).getNUM());  
    holder.tvtype.setText(list.get(position).getTYPE());
    holder.tvcode.setText(list.get(position).getCODE());
    holder.tvesme.setText(list.get(position).getESME());
    holder.checkBox6.setChecked(list.get(position).isSelected());       
    return convertView;
}
static class ViewHolder {
//  TextView tvId;
    TextView tvName;
    TextView tvPhone;
    TextView tvnum;
    TextView tvtype;
    TextView tvcode;
    TextView tvesme;
    CheckBox checkBox6;
}
public List<contac> getcontac() {
    return list;
}   
public void remove(Object position) {
    list.remove(position);  
}
      }

contact

public class contac {
private long id;
private int name;
private int phoneNumber;
private String num;
private String code;
private String esme;
private String type;
      private boolean selected;
public  contac (long id, int name, int phoneNumber,
        String num, String code ,String esme, String type) {
    this.id = id;
    this.name = name;
    this.phoneNumber = phoneNumber;
    this.code = code;
    this.esme = esme;
    this.type = type;
    selected = false;       
}
public long getId() {
    return id;
}   
public String getIdInString() {
    return Long.toString(id);
}   
public int getName() {
    return name;
}
public String getNameInString() {
    return Long.toString(name);
      }
public int getPhoneNumber() {
    return phoneNumber;
}   
public String getPhoneNumberInString() {
    return Long.toString(phoneNumber);
}       
public String getNUM() {
    return num;
}   
public String getTYPE() {
    return type;
}
public String getCODE() {
    return code;
}
public String getESME() {
    return esme;
}   
public void setId(long id) {
    this.id = id;
}       
public void setName(int name) {
    this.name = name;
}   
public void setPhoneNumber(int phoneNumber) {
    this.phoneNumber = phoneNumber;
}
public void setNUM(String num) {
    this.num = num;
}
public void setTYPE(String type) {
    this.type = type;
}
public void setCODE(String code) {
    this.code = code;
}
public void setESME(String esme) {
    this.esme = esme;
}
  public boolean isSelected() {
    return selected;
}
  public void setSelected(boolean selected) {
    this.selected = selected;
}
      }

解决方案

Follow this answer for directions regarding how to update the adapter if the listview contents has been changed. According to that answer update your adapter as

private class CustomListAdapter extends ArrayAdapter<CustomModel> {

    // you adapter code here...

    public void updateList(List<CustomModel> list) {

        this.list = list;
        notifyDataSetChanged();

    }

and call it from the activity as yourAdapterInstance.updateList(newListContent)

这篇关于从ListView中删除项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆