2016-07-16 3 views
2

RecyclerView에 CardView가 있습니다. CardView를 LongClick하면 DialogFragment가 열리고 CardView와 SQLite 데이터베이스에서 가져온 데이터가 삭제됩니다. "확인"을 클릭하면 대화 상자가 닫히고 DatabaseHelper 파일의 "deletefromDB"메소드가 데이터베이스의 테이블에서 레코드 행을 삭제하도록 설정됩니다. 이 메서드는 CARDNUM 열과 해당 cardnum 정수 값을 사용하여 레코드 행의 데이터를 삭제합니다. 대화 상자가 예상대로 닫히지 만 안타깝게도 응용 프로그램을 실행 한 후 데이터베이스를 확인한 후에 SQLite 데이터베이스에서 변경된 사항이 없습니다. SQLite에 DB Browser를 사용하여 전후로 데이터베이스를 확인합니다. 내가 여기서 무엇을 놓치고 있니?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-에 추가 android –

+0

나는 그것을 시도 할 것이다. – AJW

+0

데이터 행이 아직 없습니다. – AJW

답변

0

난 당신이 호스팅 활동/조각에서 cardnum 값을 전달하지 생각 대화 상자에서 항상 cardnum = 0 을 삭제하려고하므로 번들에 cardnum을 전달하고 대화 상자에서 fragment 인수로 전달해야합니다 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

관련 문제