【发布时间】: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