【问题标题】:How to delete recyclerview item saved in the sqlite database from a dialog box?如何从对话框中删除保存在sqlite数据库中的recyclerview项目?
【发布时间】:2017-11-22 19:42:11
【问题描述】:

我有一个 recyclerview,其中包含用户插入的 sqlite 数据库中保存的项目列表,当按下 recyclerview 项目时,会打开一个带有删除按钮的对话框,我希望删除按钮删除该条目从 sqlite 数据库中,因此从 recyclerview 中删除。我已经使用删除按钮创建了对话框和回收视图,但我不知道在 onClick 中为删除按钮添加什么。

适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private final ArrayList<String> dataSet;
    private final ArrayList<String> dataSet2;
    private final ArrayList<String> dataSet3;
    private ItemClickListener clickListener;
    String myListPreference;
    Context ctx;

    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        final TextView pound;
        final TextView mTextView;
        final TextView textView;
        final TextView categoryText;
        final CardView cardView;

        ViewHolder(View v) {
            super(v);
            SharedPreferences sharedPreferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(ctx);
            myListPreference = sharedPreferences.getString("CurrencyType", "£");

            pound = (TextView) v.findViewById(R.id.pound);
            mTextView = (TextView) v.findViewById(R.id.favourite_textView);
            categoryText = (TextView) v.findViewById(R.id.category_text);
            textView = (TextView) v.findViewById(R.id.verse_text);
            cardView = (CardView) v.findViewById(R.id.cardview);

            pound.setText(""+ myListPreference);

            v.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            if (clickListener != null) clickListener.onClick(view, getAdapterPosition());
        }

    }

    public MyAdapter(ArrayList<String> myDataset,ArrayList<String> myDataSet2,ArrayList<String> myDataset3, Context ctx) {
        this.dataSet = myDataset;
        this.dataSet2 = myDataSet2;
        this.dataSet3 = myDataset3;
        this.ctx = ctx;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rvlayout, parent, false);
        return new MyAdapter.ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
        holder.mTextView.setText(dataSet.get(position));
        holder.textView.setText(dataSet2.get(position));
        holder.categoryText.setText(dataSet3.get(position));
    }

    @Override
    public int getItemCount() {
        return dataSet.size();
    }

    public void setClickListener(ItemClickListener itemClickListener) {
        this.clickListener = itemClickListener;
    }

}

带有对话框的 Java 类

public class tab2income extends Fragment implements ItemClickListener {

    private static final String TAG = "tab2income";
    DatabaseHelper mDatabaseHelper;
    private RecyclerView mListView;
    View rootView;
    Cursor incomedata;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.tab2income, container, false);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mListView = rootView.findViewById(R.id.ListViewincome);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
        mListView.setLayoutManager(layoutManager);
        mDatabaseHelper = new DatabaseHelper(getActivity());

        populateListView();
    }

    private void populateListView() {
        Log.d(TAG, "populateListView: Displaying data in the ListView.");
        ArrayList<String> arrayList = new ArrayList<>();
        ArrayList<String> arrayList2 = new ArrayList<>();
        ArrayList<String> arrayList3 = new ArrayList<>();

        MyAdapter myAdapter = new MyAdapter(arrayList,arrayList2,arrayList3, getContext());
        mListView.setAdapter(myAdapter);

        myAdapter.setClickListener(this);

        incomedata = mDatabaseHelper.getincomeData();
        if(incomedata.moveToFirst()){
            do {
                arrayList.add(incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_AMOUNT)));
                arrayList2.add(incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_DATE)));
                arrayList3.add(incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_CATEGORY)));
            }
            while (incomedata.moveToNext());
        }
        myAdapter.notifyDataSetChanged();
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        incomedata.close();
    }


    @Override
    public void onClick(View view, int i) {
        int csrpos = incomedata.getPosition();
        incomedata.moveToPosition(i);
        displayNoteDate(
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_NOTES)),
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_DATE)),
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_CATEGORY)),
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_ACCOUNT)));
        incomedata.moveToPosition(csrpos);
    }

    public void displayNoteDate(String noteContent, String dateValue,String category,String account) {
        MaterialDialog.Builder builder= new MaterialDialog.Builder(getActivity())
                .title("Income Information")
                .content("Date: "+ dateValue+
                        "\nCategory: "+category+
                        "\nAccount: "+account+
                        "\nNote: "+noteContent)
                .positiveText("close")
                .negativeText("delete")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    }
                })
                .onNegative(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    }
                });
        builder.show();
    }
}

数据库助手中的删除方法

public Integer deleteincomeData(String _id) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete(TABLE_NAME2, "_id = ?", new String[]{_id});
}

【问题讨论】:

    标签: android sqlite android-recyclerview


    【解决方案1】:

    在 displayNoteDate() 中进行以下更改

    private void displayNoteDate(int position,String noteContent, String dateValue,String category,String account) {
        MaterialDialog.Builder builder= new MaterialDialog.Builder(getActivity())
                .title("Income Information")
                .content("Date: "+ dateValue+
                        "\nCategory: "+category+
                        "\nAccount: "+account+
                        "\nNote: "+noteContent)
                .positiveText("close")
                .negativeText("delete")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    }
                })
                .onNegative(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    long id = mDatabaseHelper.getId(position); // get item id from database
                    mDatabaseHelper.deleteItem(id); // delete item
                    populateListView(); // refresh list items
                    }
                });
        builder.show();
    } 
    

    在recyclerview里面点击

    @Override
    public void onClick(View view, int i) {
        int csrpos = incomedata.getPosition();
        incomedata.moveToPosition(i);
        displayNoteDate(i,
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_NOTES)),
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_DATE)),
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_CATEGORY)),
                incomedata.getString(incomedata.getColumnIndex(DatabaseHelper.INCOME_ACCOUNT)));
        incomedata.moveToPosition(csrpos);
    }
    

    在数据库类中添加这个方法

    public long getId(int position) {
        String query = "SELECT _id" + " FROM " + TABLE_NAME;
        Cursor cursor = getDatabase().rawQuery(query, null);
        cursor.moveToPosition(position);
        long id = cursor.getLong(cursor.getColumnIndex("_id"));
        cursor.close();
        return id;
    }
    
    public void delete(long id) {
    getWritableDatabase.delete(TABLE_NAME, "_id = " + id, null);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多