2016-07-16 2 views
2

У меня есть CardViews в RecyclerView. После LongClick на CardView открывается диалоговое окно DialogFragment для подтверждения удаления CardView и его данных, которые поступают из базы данных SQLite. После нажатия «ОК» диалог закрывается, и метод «deletefromDB» в файле DatabaseHelper настроен на удаление строки записи из таблицы в базе данных. Метод использует столбец CARDNUM с его значением целочисленного значения cardnum для удаления строки записи данных. Хотя диалог закрывается, как ожидалось, к сожалению, когда я проверил базу данных после запуска приложения, в базе данных SQLite ничего не изменилось (я использую DB Browser для SQLite для проверки базы данных до и после). Что мне здесь не хватает?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 в комплекте и передать его как фрагментарный аргумент в вашем диалоговом окне и получить значение в 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

Ty, я дам вам попробовать. – AJW

Смежные вопросы