안녕하세요. 안드로이드 스튜디오에서 recyclerview와 sqlite이용해 뿌려주는 화면 구성중입니다.
화면에 보여주는 것은 제대로 되는데 삭제 버튼 클릭시 해당 view에서는 삭제가 되지만 db에서 삭제가 안되서 다시 액티비티로 돌아오면 모든 정보가 그대로 남아있습니다. 이 부분 어떻게 해결해야 될까요?
<DbAdapter>
package com.example.user.smartap;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* Created by user on 2017-10-28.
*/
public class DbAdapter {
public Context mCtx;
SQLiteDatabase mDB;
DbOpenHelper mDbOpenHelper;
public DbAdapter(Context context){
this.mCtx = context;
mDbOpenHelper = new DbOpenHelper(mCtx);
}
public DbAdapter openDB() throws SQLException{
try{
mDB = mDbOpenHelper.getWritableDatabase();
}
catch(SQLException e){
e.printStackTrace();
}
return this;
}
public void close(){
try{
mDbOpenHelper.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
public long Add(int num, String date, int type){
try{
ContentValues cv = new ContentValues();
cv.put(DataBases.TAB_NUM, num);
cv.put(DataBases.DATE, date);
cv.put(DataBases.TYPE, type);
return mDB.insert(DataBases.TB_NAME, DataBases.ROW_ID, cv);
}
catch(SQLException e){
e.printStackTrace();
}
return 0;
}
public long Update(int id, int num, String date, int type){
try{
ContentValues cv = new ContentValues();
cv.put(DataBases.TAB_NUM, num);
cv.put(DataBases.DATE, date);
cv.put(DataBases.TYPE, type);
return mDB.update(DataBases.TB_NAME, cv, DataBases.ROW_ID +" =?", new String[]{String.valueOf(id)});
}
catch(SQLException e){
e.printStackTrace();
}
return 0;
}
public long Delete(int id){
try{
return mDB.delete(DataBases.TB_NAME, DataBases.ROW_ID+" =?",new String[]{String.valueOf(id)});
}
catch(SQLException e){
e.printStackTrace();
}
return 0;
}
public Cursor getAllData(){
String[] buffer = {DataBases.TAB_NUM, DataBases.DATE, DataBases.TYPE};
Cursor cursor = mDB.query(DataBases.TB_NAME, buffer, null, null, null, null, null);
return cursor;
}
}
<ListActivity>
package com.example.user.smartap;
import android.database.Cursor;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class ListActivity extends AppCompatActivity {
ArrayList<InfoClass> arrayList = new ArrayList<>();
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
DbAdapter db;
InfoClass info;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
db = new DbAdapter(this);
db.openDB();
Cursor cursor = db.getAllData();
arrayList.clear();
cursor.moveToFirst();
do{
InfoClass info = new InfoClass(cursor.getInt(0), cursor.getString(1), cursor.getInt(2));
arrayList.add(info);
}while(cursor.moveToNext());
cursor.close();
adapter = new Adapter_Message(arrayList);
recyclerView.setAdapter(adapter);
}
@Override
protected void onDestroy(){
db.close();
super.onDestroy();
}
// 어댑터 클래스
class Adapter_Message extends RecyclerView.Adapter<Adapter_Message.ViewHolder> {
ArrayList<InfoClass> arrayList = new ArrayList<>();
public Adapter_Message(ArrayList<InfoClass> arrayList){
this.arrayList = arrayList;
}
@Override
public Adapter_Message.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, null);
return new Adapter_Message.ViewHolder(v);
}
@Override
// 재활용 되는 뷰가 호출하는 메서드, 뷰 홀더 전달, Adapter는 position 데이터 결합
public void onBindViewHolder(Adapter_Message.ViewHolder holder, int position) {
info = arrayList.get(position);
StringBuffer buffer = new StringBuffer();
buffer.append("탭 번호: " + info.getTab_num() + "번 ");
if(info.getType() == 1)
buffer.append("예약상태: ON ");
else
buffer.append("예약상태: OFF ");
buffer.append(info.getmDate());
final int pos = position;
holder.message.setText(buffer);
// del 버튼 클릭(아이템 삭제)
holder.del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db.Delete(pos+1);
arrayList.remove(pos);
adapter = new Adapter_Message(arrayList);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
}
@Override
// 데이터 갯수 반환
public int getItemCount() {
return arrayList.size();
}
// Adapter에 대한 ViewHolder 구현 및 명시
public class ViewHolder extends RecyclerView.ViewHolder{
TextView message ;
Button del;
CardView cardview;
public ViewHolder(View itemView) {
super(itemView);
cardview = (CardView) itemView.findViewById(R.id.cardview);
message = (TextView) itemView.findViewById(R.id.message);
del = (Button) itemView.findViewById(R.id.del);
}
}
}
}