簡體   English   中英

Android:從片段中刪除SQLIte數據庫中的記錄行

[英]Android: Delete record row in a SQLIte database from a fragment

我在RecyclerView中有CardViews。 在CardView上長按時,將打開一個DialogFragment以確認刪除CardView及其來自SQLite數據庫的數據。 單擊“確定”后,對話框關閉,並設置DatabaseHelper文件中的“ deletefromDB”方法以從數據庫表中刪除記錄行。 該方法使用CARDNUM列及其cardnum整數值來刪除數據的記錄行。 雖然對話框按預期關閉,但不幸的是,運行該應用程序后我檢查數據庫時,SQLite數據庫中沒有任何變化(我使用DB Browser for 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();
      }
  }

我認為您沒有將cardnum值從托管活動/片段傳遞到您的對話框,因此您始終嘗試刪除cardnum = 0,因此解決方案是您應將cardnum捆綁發送,並將其作為片段參數傳遞到對話框中,在onCreateView()中獲取值。 在其中開始您的dialogfragment添加此

Bundle args = new Bundle();
args.putInt("cardnum", cardnum);
myFragment.setArguments(args);

並在您的onCreateView()中

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");
// add this
cardnum = getArguments().getInt("cardnum", 0);
Button btnOK = (Button) rootView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        dbHelper.deletefromDB(cardnum);               
        dismiss();
    }
});

return rootView;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM