Android RecyclerView数据库删除项目

时间:2016-06-05 20:08:46

标签: java android sqlite android-recyclerview

我正在尝试从从SQLite DB填充的RecyclerView列表中删除项目并收到此错误:

java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1

我正在尝试使用的代码是处理未从SQLite数据库填充的数据,但在这种情况下,它会在长时间点击时崩溃。这是我的代码:

 @Override
    public void onBindViewHolder(RecHolder holder, final int position) {
        final Todo item = listData.get(position);

        final int currentPosition = position;
        final Todo infoData = listData.get(position);

        holder.container.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                removeData(infoData);
                return true;
            }
        });

    }

    private void removeData(Todo infoData) {
        int position = dbTodo.indexOf(infoData);
        dbTodo.remove(position);
        notifyItemRemoved(position);
    }

任何人都可以帮我吗?

我在db.Todo中搞砸了这个removeData(),它应该是listData,就像inicialisation一样。

2 个答案:

答案 0 :(得分:0)

该错误表示在infoData中找不到dbTodo - 因此indexOf返回-1,因此在您的后续行中,您会删除索引{{ 1}}(显然是出界的)。要消除此错误,您必须在尝试删除它之前检查-1是否存在。

infoData

我希望这会对你有所帮助。

答案 1 :(得分:0)

很明显,您尝试用来获取项目的位置不正确。

dbTodo.indexOf(infoData)

如果找不到infoData对象,则返回-1,因此您必须选择: 1)在尝试从数据库中删除对象之前检查位置

if(position >= -1){
     dbTodo.remove(position);
     ......

2)在尝试删除之前检查infoData是否真的在数据库中。