ذخیره چک باکس کلیک شده حتی با خروج از اکتیویتی
سلام
تو قسمت لیست ویو ها چک باکسی دارم که وقتی کلیک شد ، با خروج از اکتیویتی یا برنامه به همون شکل باقی بمونه و بصورت چک شده باقی بمونه
مطمئنم دیدید تو برنامه های پیامکی هم هست ، وقتی روی یه پیام علاقه مندی رو کلیک میکنی و از برنامه خارج میشی ، بعد از ورود مجدد به محیط برنامه ، آیکن علاقه مندی همون پیامک انتخاب شده اس
برای اینکه آیتم رو به لیست علاقه مندی ها اضافه کنم و نمایش بدم مشکلی ندارم
ولی مشکلم اینجاست که چک باکسی که کلیک شده با خروج از اکتیویتی دوباره بصورت انتخاب نشده درمیاد
favorite_check.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkbox = (CheckBox) view;
item.done = checkbox.isChecked();
if (item.done) {
Toast.makeText(G.context, "بستنی به لیست علاقه مندی ها افزوده شد", Toast.LENGTH_SHORT).show();
G.database.execSQL("UPDATE icecream SET fav=1 WHERE id=" + item.id);
} else {
Toast.makeText(G.context, "بستنی از لیست علاقه مندی ها حذف گردید", Toast.LENGTH_SHORT).show();
G.database.execSQL("UPDATE icecream SET fav=0 WHERE id=" + item.id);
}
}
});
ممنون میشم راهنمایی کنید.
اینم کد کامل آداپتر
public class AdapterNote extends ArrayAdapter<StructNote> {
public AdapterNote(ArrayList<StructNote> array) {
super(G.context, R.layout.adapter_notes, array);
}
public static class ViewHolder {
public ImageView imgDelete;
public TextView txtDescription;
public static CheckBox favorite_check;
public ViewHolder(View view) {
txtDescription = (TextView) view.findViewById(R.id.txtDescription);
imgDelete = (ImageView) view.findViewById(R.id.imgDelete);
favorite_check = (CheckBox) view.findViewById(R.id.favorite_check);
}
public void fill(final ArrayAdapter<StructNote> adapter, final StructNote item, final int position) {
txtDescription.setText(item.sms_text + item.sms_id);
favorite_check.setChecked(item.done);
imgDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
AlertDialog.Builder biulder = new AlertDialog.Builder(G.currentActivity);
biulder.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("هشدار !")
.setMessage("پس از حذف ، گزینه مورد نظر قابل بازگشت نخواهد بود آیا اطمینان دارید؟")
.setPositiveButton("بله", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
adapter.remove(item);
G.database.execSQL("DELETE FROM icecream WHERE id=" + item.id);
}
})
.setNegativeButton("خیر", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
biulder.create().show();
adapter.notifyDataSetChanged();
}
});
favorite_check.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkbox = (CheckBox) view;
item.done = checkbox.isChecked();
if (item.done) {
Toast.makeText(G.context, "بستنی به لیست علاقه مندی ها افزوده شد", Toast.LENGTH_SHORT).show();
G.database.execSQL("UPDATE icecream SET fav=1 WHERE id=" + item.id);
} else {
Toast.makeText(G.context, "بستنی از لیست علاقه مندی ها حذف گردید", Toast.LENGTH_SHORT).show();
G.database.execSQL("UPDATE icecream SET fav=0 WHERE id=" + item.id);
}
}
});
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructNote item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_notes, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
سوال اولت رو نمیدونم! چک کن ببین اصلا تغییرات تو دیتابیس ثبت میشه؟ اگه آره بعد مقدار ها رو logکن و چکشون کن ببینخوندنش از دیتابیس هم درسته یا نه؟
برای سوال دومت مطمئن نیستم چون باید تست بشه ولی شاید مشکل از همون adapter.remove(item); باشه
بیا به جای حذف ایتم از adapter، از اون آرایه اصلی که به آداپتر معرفی کردی اون آیتم رو حذف کن احتمال قوی درست میشه
اینم کد اتصال به بانک اطلاعاتی
public class G extends Application {
public static Context context;
public static LayoutInflater inflater;
public static SQLiteDatabase database;
public static Activity currentActivity;
public static final Handler HANDLER = new Handler();
public static ArrayList<StructNote> notes = new ArrayList<StructNote>();
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_APP = DIR_SDCARD + "/icecream";
@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
new File(DIR_APP).mkdirs();
File file = new File(DIR_APP + "/icecreamdata.sqlite");
if ( !file.exists()) {
copydb();
}
database = SQLiteDatabase.openOrCreateDatabase(DIR_APP + "/icecreamdata.sqlite", null);
database.execSQL("CREATE TABLE IF NOT EXISTS icecream(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE ," +
"category TEXT," +
"title TEXT," +
"fav TINYINT" +
")");
}
private void copydb() {
AssetManager assetManager = context.getAssets();
InputStream inputStream;
try {
inputStream = assetManager.open("icecreamdata.sqlite");
HelperIO.copyFile(inputStream, DIR_APP + "/icecreamdata.sqlite");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
صحت کدهات رو چک نکردم ولی اگه کدهات کار کنن قسمت ساخت دیتابیس نیاز نبود :
public class G extends Application {
public static Context context;
public static LayoutInflater inflater;
public static SQLiteDatabase database;
public static Activity currentActivity;
public static final Handler HANDLER = new Handler();
public static ArrayList<StructNote> notes = new ArrayList<StructNote>();
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_APP = DIR_SDCARD + "/icecream";
@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
new File(DIR_APP).mkdirs();
File file = new File(DIR_APP + "/icecreamdata.sqlite");
if ( !file.exists()) {
copydb();
}
database = SQLiteDatabase.openOrCreateDatabase(DIR_APP + "/icecreamdata.sqlite", null);
}
private void copydb() {
AssetManager assetManager = context.getAssets();
InputStream inputStream;
try {
inputStream = assetManager.open("icecreamdata.sqlite");
HelperIO.copyFile(inputStream, DIR_APP + "/icecreamdata.sqlite");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
الان باید بتونی از دیتابیس اطلاعات رو بخونی
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .