Recyclerview sqllite更新仅适用于列表中的第一项

时间:2018-06-09 11:40:51

标签: java android

我有一个在我的适配器类的recylcerview中显示的项目列表我实现了onlongclick方法,当使用它时会打开一个新的alertdialog,当我按下alterdialog中的所选项目时调用{{1}应该更新所选项目的功能问题是这仅适用于我的列表中显示的第一个项目,所以例如,如果我按下列表上的第10个项目,则该项目不会更新。

更新功能

updateList()

OnlongClickListener 此方法位于我的片段类中。

public boolean updateList(long rowId, String stanje) {
    ContentValues newValues = new ContentValues();
    newValues.put(TABELA_STOLPEC_STANJE,stanje);
    return db.update(TABELA_IME,newValues,TABELA_STOLPEC_ID+"="+rowId,null)>0;

}
我的适配器类

中的

onlongclicklistener实现

mmAdapter.setOnLongClick(new ToDoRecyclerViewAdapter.OnLongClickListener_() {
            @Override
            public void onLongClick(long i,String item) {
                if(item.equals("doing")) {
                    boolean update_1 = db.updateList(i, item);
                    if(update_1) {                        
                        android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
                        ft.detach(TodoFragment.this).attach(TodoFragment.this).commit();

                        Toast.makeText(getContext(), "Dodano v bazo.!", Toast.LENGTH_SHORT).show();
                    }else {
                        Toast.makeText(getContext(), "Prislo je do napake!", Toast.LENGTH_SHORT).show();
                    }
                }
            }

        });

1 个答案:

答案 0 :(得分:0)

原因很简单,你用索引更新错误的行,正确的解决方案:

@Override
public void onBindViewHolder(@NonNull final CustomViewHolder holder, int position) {

    //Rest of onBindViewHolder code

    holder.mView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(final View v) {
            final int pos = holder.getAdapterPosition();

            AlertDialog.Builder adb = new AlertDialog.Builder(v.getContext());
            CharSequence meni[] = new CharSequence[] {"DOING"};
            adb.setItems(meni, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                if(i == 0) {
                    mValues.get(pos).setStanje("doing");
                    clickLinster_.onLongClick(mValues.get(pos).getId_(),mValues.get(pos).getStanje());
                }
                }
            });
            AlertDialog alertDialog = adb.create();
            alertDialog.setCancelable(true);
            alertDialog.show();
            return true;
        }
    });

}