私はRecyclerViewにCardViewを持っています。 CardViewをLongClickすると、DialogFragmentが開き、CardViewとそのSQLiteデータベースからのデータの削除が確認されます。 "OK"をクリックするとダイアログが閉じ、DatabaseHelperファイルの "deletefromDB"メソッドがデータベースのテーブルからレコード行を削除するように設定されます。このメソッドは、CARDNUM列とそのcardnum整数値を使用して、レコード行のデータを削除します。残念ながら、アプリケーションを実行した後にデータベースをチェックしたときに、ダイアログが閉じられる間に、SQLiteデータベースで何も変更されませんでした(SQLiteのDBブラウザを使用して前後のデータベースを確認しています)。私はここで何が欠けていますか?Android:SQLIteデータベースのレコード行をフラグメントから削除する
DeleteCardViewFragment.java
public class DeleteCardViewFragment extends DialogFragment {
DatabaseHelper dbHelper;
private int cardnum = 0;
public DeleteCardViewFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
dbHelper = new DatabaseHelper(getActivity());
final View rootView = inflater.inflate(R.layout.delcardview_layout, container, false);
getDialog().setTitle("Delete skycard");
...
Button btnOK = (Button) rootView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
**dbHelper.deletefromDB(cardnum);**
dismiss();
}
});
return rootView;
}
}
データベースのテーブル名と列のためのDBContract.javaファイル
public final class DBContract {
public DBContract() {}
public static abstract class DBEntry implements BaseColumns {
public static final String TABLE_NAME_USERINPUTS = "userinputs";
public static final String COLUMN_NAME_ID = "_id";
public static final String COLUMN_NAME_CARDNUM = "cardnum";
public static final String COLUMN_NAME_TODO = "todo";
public static final String COLUMN_NAME_NOTE1 = "note1";
public static final String COLUMN_NAME_NOTE2 = "note2";
public static final String COLUMN_NAME_DUEDATE = "duedate";
public static final String COLUMN_NAME_DUETIME = "duetime";
public static final String COLUMN_NAME_TIMESTAMP = "timestamp";
}
}
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
...
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE IF NOT EXISTS "+ DBContract.DBEntry.TABLE_NAME_USERINPUTS +
"(" + DBContract.DBEntry.COLUMN_NAME_ID +
" INTEGER PRIMARY KEY, " +
DBContract.DBEntry.COLUMN_NAME_CARDNUM +
" INTEGER," +
DBContract.DBEntry.COLUMN_NAME_TODO +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_NOTE1 +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_NOTE2 +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_DUEDATE +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_DUETIME +
" TEXT," +
DBContract.DBEntry.COLUMN_NAME_TIMESTAMP +
" INTEGER)";
**public void deletefromDB(int cardnum)** {
SQLiteDatabase db = this.getWritableDatabase();
// Delete the CardView's data row using the integer from cardum.
db.delete(DBContract.DBEntry.TABLE_NAME_USERINPUTS,
DBContract.DBEntry.COLUMN_NAME_CARDNUM + "= ?", new String[]{String.valueOf(cardnum)});
db.close();
}
}
http://stackoverflow.com/questions/7510219/deleting-row-in-sqlite-in-での追加 アンドロイド –
私はそれを試してみましょう。 – AJW
データ行がまだ残っていません。 – AJW