2016-07-16 10 views
2

私は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(); 
     } 
    } 
+0

http://stackoverflow.com/questions/7510219/deleting-row-in-sqlite-in-での追加 アンドロイド –

+0

私はそれを試してみましょう。 – AJW

+0

データ行がまだ残っていません。 – AJW

答えて

0

私はあなたがホスティング活動/フラグメントから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; 
} 
+0

に集められています。タイ、私はそれを試してみましょう。 – AJW

関連する問題