【问题标题】:How can remove adapter from Listview, Android如何从 Listview,Android 中删除适配器
【发布时间】:2014-05-29 10:44:21
【问题描述】:

我使用 SimpleAdapter 和 Listview 的自定义行布局

SimpleAdapter adapter = new SimpleAdapter(ListOrder.this, oslist,
                    R.layout.list_v, 
                    new String[] { "name","time","status" }, 
                    new int[] { R.id.tablename, R.id.timeorder, R.id.status});
            list.setAdapter(adapter);

之后,我重新加载 Listview 的数据,我想删除旧数据。 我不知道如何在将新数据添加到 Listview 之前删除旧数据。

我用过

adapter.remove(adapter.getItem(i));

但有错误

对于 SimpleAdapter 类型的方法 remove(Object) 未定义

请帮帮我! 谢谢!

【问题讨论】:

  • 从外观上看,它就像是没有删除功能的simplecursoradapter。所以您需要从您的数据库/内容提供商中删除该项目。然后重新查询

标签: android listview android-listview android-adapter simpleadapter


【解决方案1】:

你可以简单地设置

listview.setAdapter(null);

【讨论】:

  • 谢谢。但是,Android reference of this function 并没有说明 null 参数是否有效。我们怎么知道它在未来的某些 SDK 版本中不会出现异常?
【解决方案2】:

只需修改底层 List 并通知适配器即可。像这样:

oslist.clear();
adapter.notifyDataSetChanged();

如果您只想删除一两个:

oslist.remove(index);
adapter.notifyDataSetChanged();

【讨论】:

    【解决方案3】:

    SimpleAdapter 没有 remove 方法,因此您应该将其扩展到您自己的适配器并添加 remove 方法。例如:

    private class Adapter extends SimpleAdapter {
        private List<? extends Map<String, ?>> data;
    
        public Adapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
            super(context, data, resource, from, to);
            this.data = data;
            //... place some initializing code here
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //place your code for getView here.
            return super.getView(position, convertView, parent);
        }
    
        public void remove(int position) {
            if (position >= 0 && data.size() < position && data.get(position) != null) {
                data.remove(position);
                this.notifyDataSetChanged();
            }
        }
    }
    

    但如果您有定期更新(删除 || 添加)的数据数组,请考虑使用具有 remove() 和其他方法(例如:http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown)的 ArrayAdapter(即使没有您自己的扩展)。

    希望对你有帮助:)

    【讨论】:

    • 我将参考如何使用 ArrayAdapter 。非常感谢!
    • 您应该在 data.remove(position) 之后调用 notifyDataSetChanged(),否则可能会导致列表末尾崩溃。
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多