我正在开发一个Android应用程序,它显示了一系列卡片,这些卡片包含一些信息(在主片段中),这些信息存储在本地SQLite数据库中。
就像这个问题中的Matteo一样,我已经实现了一个自定义回收器适配器(GitHub链接),以及一个用于滑动的自定义侦听器(SwipeableRecyclView),但面临着一个有点不同的问题。当我滑动我的carview项目时,它会返回到它的“开始位置”,并且可能之前滑动的项目根本没有被删除(从数据库中
我的数据库助手的代码如下:
public class GeekNotesDatabaseHelper {
static final String DB_NAME = "geeknotes_db";
static final String TABLE = "notes_table";
static final int VERSION = 1;
static final String UID = "_id";
static final String TITLE = "title";
static final String CATEGORY = "category";
private DBHelper dbHelper;
private SQLiteDatabase database;
public GeekNotesDatabaseHelper(Context context) {
dbHelper = new DBHelper(context);
database = dbHelper.getWritableDatabase();
}
public void insertData(String title, String category) {
ContentValues cv = new ContentValues();
cv.put(TITLE, title);
cv.put(CATEGORY, category);
database.insert(TABLE, null, cv);
}
public Cursor getAllData() {
String buildSQL = "SELECT * FROM " + TABLE + " ORDER BY " + UID + " DESC";
return database.rawQuery(buildSQL, null);
}
public void deleteByID(int position) {
database.delete(TABLE, UID + " = " + position, null);
}
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE + " (" + UID + " INTEGER " +
"PRIMARY KEY AUTOINCREMENT, " + TITLE + " TEXT, " + CATEGORY + " TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE);
onCreate(db);
}
}
}
适配器类:
public class GeekNotesAdapter extends CursorRecyclerAdapter<GeekNotesAdapter.ViewHolder> {
private final Fragment fragment;
private OnItemClickListener itemClickListener;
public GeekNotesAdapter(Cursor cursor, Fragment fragment) {
super(cursor);
this.fragment = fragment;
}
@Override
public void onBindViewHolderCursor(ViewHolder holder, Cursor cursor) {
holder.title.setText(
cursor.getString(cursor.getColumnIndexOrThrow(GeekNotesDatabaseHelper.TITLE)).replaceAll("\\<[^>]*>", ""));
holder.category.setText(
cursor.getString((cursor.getColumnIndexOrThrow(GeekNotesDatabaseHelper.CATEGORY))));
holder.id = cursor.getInt(cursor.getColumnIndexOrThrow(GeekNotesDatabaseHelper.UID));
}
@Override
public GeekNotesAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
final LayoutInflater mInflater = LayoutInflater.from(viewGroup.getContext());
final View sView = mInflater.inflate(R.layout.note_item, viewGroup, false);
return new ViewHolder(sView);
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
TextView category;
int id;
public ViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.name);
category = (TextView) view.findViewById(R.id.category);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (itemClickListener != null) {
itemClickListener.onItemClick(v, id);
}
}
}
public interface OnItemClickListener {
public void onItemClick(View view , int position);
}
public void setOnItemClickListener(final OnItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
}
还有我的cardview项目片段的代码:
public class GeekNotesFragment extends Fragment {
GeekNotesDatabaseHelper dbHelper;
GeekNotesAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main_fragment, container, false);
dbHelper = new GeekNotesDatabaseHelper(getActivity());
Bundle bundle = getArguments();
if (bundle != null) {
// String itemTitle = bundle.getString("tag_item_title");
// String itemCategory = bundle.getString("tag_item_category");
Item item = (Item) bundle.getSerializable("note_item");
dbHelper.insertData(item.getName(), item.getCategory());
}
final RecyclerView recyclerList = (RecyclerView) v.findViewById(R.id.itemsInCards);
recyclerList.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.VERTICAL);
recyclerList.setLayoutManager(llm);
setTargetFragment(GeekNotesFragment.this, 0);
adapter = new GeekNotesAdapter(dbHelper.getAllData(), getTargetFragment());
recyclerList.setAdapter(adapter);
SwipeableRecyclerViewTouchListener swipeTouchListener =
new SwipeableRecyclerViewTouchListener(recyclerList, new SwipeableRecyclerViewTouchListener.SwipeListener() {
@Override
public boolean canSwipe(int position) {
return true;
}
@Override
public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
dbHelper.deleteByID(position);
adapter.notifyItemRemoved(position);
}
adapter.notifyDataSetChanged();
}
@Override
public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
dbHelper.deleteByID(position);
adapter.notifyItemRemoved(position);
}
adapter.notifyDataSetChanged();
}
});
recyclerList.addOnItemTouchListener(swipeTouchListener);
FloatingActionButton fab = (FloatingActionButton) v.findViewById(R.id.fab);
fab.attachToRecyclerView(recyclerList);
// fab.setBaselineAlignBottom(true);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, new NewNoteFragment());
ft.addToBackStack(null);
ft.commit();
}
});
return v;
}
}
将项目添加到我的数据库/回收器视图是可以的。但不幸的是,删除不会。我是开发Android应用程序的新手,所以,请告诉我这里可能出了什么问题,哪个问题不允许我正确删除卡片项目
提前致谢。
好吧,这是一个相当古老的帖子。但我想回答,因为它可以帮助别人。
回答-尝试使用回收器视图的方法,如-
要获取该位置的视图持有人,然后访问该视图的值,请在数据库中删除。
本文向大家介绍删除SAP HANA数据库视图,包括了删除SAP HANA数据库视图的使用技巧和注意事项,需要的朋友参考一下 您可以使用Drop命令删除视图,就像我们删除表一样。您可以在数据库视图上的表上执行所有操作。
我需要在不刷新整个页面的情况下刷新视图的一部分。 在我的索引中。html页面我有三个面板,其中一个按状态显示票证数量,每次创建或更新新票证时,我都需要刷新这个数字。我使用Java和Spring Boot以及Thymelaf来构建我的应用程序。 这是我的观点: 我现在就是这样做的: 我曾尝试使用web,但我不知道如何获得此功能并刷新面板。
对于类中的方法,文档是这样说的: 取消此对话框,将其从屏幕上移除。可以从任何线程安全地调用此方法。请注意,当对话框被取消时,不应重写此方法来进行清理,而应在中实现此方法。 在我的代码中,我所做的就是调用来删除它。但是我没有做其他任何事情,甚至没有使用。因此,我问的是如何正确地删除以避免任何内存泄漏等。
我试图允许刷卡以删除回收器视图中的项目,但由于某些原因,它并不总是玩得很好,显示的是空白而不是纸牌。 我已经制作了抛出和移动项目的代码句柄,以触发滑动动画,当滑动动画结束时,项目将从数据集中删除并通知适配器。 可能是因为我是RecyclerView新手,但是找不到缺少的东西。 我做了什么错在哪里?为什么它有时工作得很好,有时却不起作用? 有没有更好的解决方案来处理滑动到移除的处理?
问题内容: 我正在用Node.js和Mongoose准备数据库创建脚本。如何检查数据库是否已经存在,如果存在,请使用Mongoose删除(删除)该数据库? 我找不到一种将其与猫鼬放在一起的方法。 问题答案: 没有办法从猫鼬中删除一个集合,最好的办法是删除其中一个的内容: 但是有一种方法可以访问mongodb本机javascript驱动程序,该驱动程序可用于 警告 尝试备份之前进行备份,以防万一出问
我是一个初学者开发人员。我的应用程序中有一个SQLite数据库。我已经成功地为其添加了添加、删除和更新功能。我现在正在尝试实现滑动删除,但是,我面临着当前的问题:有时在我滑动并删除项目后,它会成功删除(从数据库中),有时不会,有时会删除上面的项目,有时会删除上面的项目2 id。我做了很多尝试和错误,但我无法确认为什么会发生这种情况。总是发生的是项目从视图中删除,因为它不再有自己的卡(我正在使用ca