Как сохранить значения флажков в RecyclerView с помощью SQLiteJAVA

Программисты JAVA общаются здесь
Anonymous
Как сохранить значения флажков в RecyclerView с помощью SQLite

Сообщение Anonymous »

Я хочу, чтобы значения флажков фиксировались даже после закрытия и открытия приложения.

Изображение

Что я сделал:
  • Код для сохранения значений с помощью SQLiteHelper

    Код: Выделить всё

    public class cbDB  extends SQLiteOpenHelper {
    private static int DB_VERSION = 1;
    private static String DATABASE_NAME = "forcbDB";
    private static String TABLE_NAME = "cbTable"; //text n cb table
    public static String KEY_ID = "id";
    public static String KR_VER = "krVer";
    public static String CB_STATUS = "cbStatus";
    private static String CREATE_TABLE= "CREATE TABLE " + TABLE_NAME + " (" + KEY_ID + " TEXT," + KR_VER + " TEXT," + CB_STATUS + " TEXT)";
    
    public cbDB(Context context) { super(context, DATABASE_NAME, null, DB_VERSION);}
    
    @Override public void onCreate(SQLiteDatabase sqLiteDatabase) {sqLiteDatabase.execSQL(CREATE_TABLE);
    
    } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    
    }
    
    //create empty table public void insertEmpty(){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues cv = new ContentValues();
    
    //my value for checkbox ?!
    for (int x = 1; x < 11; x++){
    cv.put(KEY_ID, x);
    cv.put(CB_STATUS, "0");
    
    long newRowId = db.insert(TABLE_NAME, null, cv);
    
    }
    }
    
    //insert data into database
    
    public void insertIntoTheDatabase(String krVer, String id, String cb_status){ SQLiteDatabase db; db = this.getWritableDatabase();ContentValues cv = new ContentValues();
    
    cv.put(KR_VER, krVer);
    cv.put(KEY_ID, id);
    cv.put(CB_STATUS, cb_status);
    
    long newRowId = db.insert(TABLE_NAME, null, cv);
    Log.d("cbDB Status" , krVer + ", cbstatus — "+cb_status+" — .  " + cv);
    
    //read all data
    public Cursor read_all_data(String id) { SQLiteDatabase db = this.getReadableDatabase();
    
    String sql = "select * from " + TABLE_NAME + " where " + KEY_ID+"="+id+"";
    return db.rawQuery(sql, null, null);
    
    }
    
    //remove line from database
    public void remove_cb(String id) { SQLiteDatabase db = this.getWritableDatabase(); String sql = "UPDATE " + TABLE_NAME + " SET  " + CB_STATUS+" ='0' WHERE "+KEY_ID+"="+id+""; db.execSQL(sql); Log.d("remove", id.toString());
    
    }
    
    //select all cb list
    public Cursor select_all_cb_list() { SQLiteDatabase db = this.getReadableDatabase(); String sql = "SELECT * FROM " + TABLE_NAME + " WHERE "+ CB_STATUS+" ='1'"; return db.rawQuery(sql,null,null); }
    
    }
    
  • Код SQLite в адаптере

    Код: Выделить всё

    public class n_adapter extends RecyclerView.Adapter {
    private final ArrayList krlist;
    private Intent intent;
    
    private Context context;
    private cbDB cbDB;
    
    public n_adapter(ArrayList  krlist) {
    
    this.krlist = krlist;
    this.context = context;
    }
    
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    View view = layoutInflater.inflate(R.layout.kr_view,parent,false);
    
    cbDB = new cbDB(context);
    //create table on first
    SharedPreferences prefers = context.getSharedPreferences("prefers", Context.MODE_PRIVATE);
    boolean firstStart = prefers.getBoolean("firstStart", true);
    if (firstStart) {
    createTableOnFirstStart();
    }
    
    return new ViewHolder(view);
    
    }
    
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) {
    
    holder.textView.setText(krlist.get(position).getKr_ver());
    holder.textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    intent = new Intent(v.getContext(),beginner_n_use_jp.class);
    intent.putExtra("number",position);
    v.getContext().startActivity(intent);
    
    }
    });
    
    final kr_style kr_style = krlist.get(position);
    
    holder.chk_box.setOnCheckedChangeListener(null);
    holder.chk_box.setChecked(kr_style.getSelected());
    holder.chk_box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked)
    {
    kr_style.setSelected(isChecked);
    
    }
    });
    
    readCursorData(kr_style, holder);
    holder.textView.setText(kr_style.getKr_ver());
    
    }
    
    @Override
    public int getItemCount() {return krlist.size();}
    
    public Object getItem(int position){return krlist.get(position);}
    
    public class ViewHolder extends RecyclerView.ViewHolder{
    
    public TextView textView;
    public CheckBox chk_box;
    
    public ViewHolder(@NonNull View itemView) {
    super(itemView);
    textView = itemView.findViewById(R.id.kr_ver);
    chk_box = itemView.findViewById(R.id.chk_box);
    
    //add to cb
    chk_box.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    int position = getAdapterPosition();
    kr_style kr_style = krlist.get(position);
    
    if (kr_style.getCbStatus().equals("0")) {
    kr_style.setCbStatus("1");
    cbDB.insertIntoTheDatabase(kr_style.getKr_ver(), kr_style.getKey_id(), kr_style.getCbStatus());
    chk_box.setBackgroundResource(R.drawable.chked_box);
    } else {
    kr_style.setCbStatus("0");
    cbDB.remove_cb(kr_style.getKey_id());
    chk_box.setBackgroundResource(R.drawable.empty_box);
    }
    }
    });
    
    }
    
    }
    
    private void createTableOnFirstStart() {
    cbDB.insertEmpty();
    
    SharedPreferences prefers = context.getSharedPreferences("prefers", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefers.edit();
    editor.putBoolean("firstStart", false);
    editor.apply();
    }
    
    private void readCursorData(kr_style kr_style, ViewHolder viewHolder) {
    Cursor cursor = cbDB.read_all_data(kr_style.getKey_id());
    SQLiteDatabase db = cbDB.getReadableDatabase();
    try {
    while (cursor.moveToNext()) {
    @SuppressLint("Range") String item_cb_status = cursor.getString(cursor.getColumnIndex(cbDB.CB_STATUS));
    kr_style.setCbStatus(item_cb_status);
    
    //check cb status
    if (item_cb_status != null && item_cb_status.equals("1")) {
    viewHolder.chk_box.setBackgroundResource(R.drawable.chked_box);
    } else if (item_cb_status != null && item_cb_status.equals("0")) {
    viewHolder.chk_box.setBackgroundResource(R.drawable.empty_box);
    }
    }
    
    } finally {
    if (cursor != null &&  cursor.isClosed())
    cursor.close();
    db.close();
    }
    
    }
    }
    
  • Код элемента

    Код: Выделить всё

    public class kr_style {
    private String kr_ver;
    
    public kr_style(String kr_ver) {
    this.kr_ver = kr_ver;
    }
    
    public String getKr_ver() {
    return kr_ver;
    }
    
    public void setKr_ver(String kr_ver) {
    this.kr_ver = kr_ver;
    }
    
    public boolean getSelected;
    
    boolean isSelected;
    
    public boolean getSelected()
    {
    return isSelected;
    }
    
    public void setSelected(boolean selected)
    {
    isSelected = selected;
    }
    
    }
    
    private String key_id;
    private String cbStatus;
    
    public kr_style() {
    
    }
    
    public kr_style(String key_id, String cbStatus) {
    this.key_id = key_id;
    this.cbStatus = cbStatus;
    }
    
    public String getKey_id() {
    return key_id;
    }
    
    public void setKey_id(String key_id) {
    this.key_id = key_id;
    }
    
    public String getCbStatus() {
    return cbStatus;
    }
    
    public void setCbStatus(String cbStatus) {
    this.cbStatus = cbStatus;
    }
    
main.java

Код: Выделить всё

public class beginner_n_use extends AppCompatActivity {

public RecyclerView recyclerView;
ArrayList krlist;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycler_view);

recyclerView = findViewById(R.id.rc_view);

RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);

recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(new n_adapter(insertlist()));

}

ArrayList insertlist() {
krlist = new ArrayList();
kr_style list1 = new kr_style("A");
kr_style list2 = new kr_style("B");
kr_style list3 = new kr_style("C");
kr_style list4 = new kr_style("D");
kr_style list5 = new kr_style("E");
kr_style list6 = new kr_style("F");
kr_style list7 = new kr_style("G");
kr_style list8 = new kr_style("AAA");
kr_style list9 = new kr_style("BBB");
kr_style list10 = new kr_style("CCC");
kr_style list11 = new kr_style("DDD");
kr_style list12 = new kr_style("EEE");
kr_style list13 = new kr_style("FFF");
kr_style list14 = new kr_style("GGG");
kr_style list15 = new kr_style("HHH");
kr_style list16 = new kr_style("III");
kr_style list17 = new kr_style("JJJ");
kr_style list18 = new kr_style("KKK");
kr_style list19 = new kr_style("LLL");
kr_style list20 = new kr_style("MMM");

krlist.add(list1);krlist.add(list2);krlist.add(list3);krlist.add(list4);krlist.add(list5);
krlist.add(list6);krlist.add(list7);krlist.add(list8);krlist.add(list9);krlist.add(list10);
krlist.add(list11);krlist.add(list12);krlist.add(list13);krlist.add(list14);krlist.add(list15);
krlist.add(list16);krlist.add(list17);krlist.add(list18);krlist.add(list19);krlist.add(list20);

return krlist;

}

}
Это все, что я сделал для сохранения значений флажков. Я хочу, чтобы значения флажков в RecyclerView сохранялись с помощью SQLite. До того, как я применил код SQLite, он работал хорошо, но после кода SQLite RecyclerView ничего не показывает.


Подробнее здесь: https://stackoverflow.com/questions/790 ... ith-sqlite

Вернуться в «JAVA»