【问题标题】:Adapter remove doesn't work适配器删除不起作用
【发布时间】:2015-06-09 16:16:16
【问题描述】:

我尝试从自定义适配器中删除该项目并通知数据已更改。但这似乎行不通。

mListDataAdapter.remove(mListDataAdapter.getItem(position));
mListDataAdapter.notifyDataSetChanged();

两者都不起作用mListDataAdapter.clear(); 在调试模式下适配器没有变化。

如果有帮助,我的活动会扩展 AppCompatActivity。我在onActionItemClicked 中调用此代码。同时我从数据库中调用删除,这是正确的。

更新。 这是 ListDataAdapter:

public class ListDataAdapter extends ArrayAdapter {

List list = new ArrayList();


public ListDataAdapter(Context context, int resource) {
    super(context, resource);
}

static class LayoutHandler{
TextView id_;
TextView title;

}


@Override
public void add(Object object) {
    super.add(object);
    list.add(object);
}

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

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

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

    View row = convertView;
    LayoutHandler layoutHandler;

    if(row == null){

        LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.todo_row_layout,parent,false);

        layoutHandler = new LayoutHandler();
        layoutHandler.id_ = (TextView) row.findViewById(R.id.id_);
        layoutHandler.title = (TextView) row.findViewById(R.id.todoTitle);
        row.setTag(layoutHandler);
    } else {
        layoutHandler = (LayoutHandler) row.getTag();

    }

        DataProvider dataProvider = (DataProvider) this.getItem(position);
        layoutHandler.title.setText(dataProvider.getTitle());
        layoutHandler.id_.setText(String.valueOf(dataProvider.getId_()));

    return row;

   // return super.getView(position, convertView, parent);
}

}

【问题讨论】:

  • 请使用您的 CustomAdapter 更新您的问题或删除方法源以更好地帮助您。
  • 请上传完整代码和logcat。这部分看起来不错。
  • 已更新适配器代码。

标签: android sqlite


【解决方案1】:

在Adapter中,定义remove函数

public void remove(int position)
{
    list.remove(position);
    this.notifyDataSetChanged();
}
public void remove(Object object)
{
    list.remove(object);
    this.notifyDataSetChanged();
}

当你想删除一次时,调用 mListDataAdapter.remove(position) 或 mListDataAdapter.remove(object)

【讨论】:

  • 刷新光标后工作。
【解决方案2】:

在您的 CustomAdapter 类中使用以下删除函数:将 mList 视为您在 CustomAdapter 中的数据对象的 ArrayList。

    public void remove(CustomObject msg ){
                mlist.remove(msg);
                notifyDataSetChanged(); 
    }

    public void remove(int ID){

            int size = mlist.size()-1;
            for(int i=size; i>=0; i--){
                if( mlist.get(i).getId() == ID)     {
                        mlist.remove(i);
                        break;
                }
            }
            notifyDataSetChanged(); 

        }

【讨论】:

    【解决方案3】:

    当您 remove/add/change 您的数据时,您应该在 adapter 中使用数据模型,然后在 notified 中使用 adapter。在您的情况下,我建议如下:

    在您的 adapter 类中,创建一个删除数据的方法:

    public void remove(Object obj) { this.list.remove(obj); notifyDataSetChanged(); //by call this you should not to call adapter.notifyDataSetChange() }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-26
      • 2016-09-15
      • 2015-02-27
      • 2014-04-26
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2018-08-12
      相关资源
      最近更新 更多