View Full Version : مشکل CursorAdapter در لیست ویو
hamedjj
چهارشنبه 17 اردیبهشت 1393, 18:38 عصر
سلام
من با استفاده از cursorAdapter اطلاعات یک دیتابیس آماده را در لیست میخونم که یه checkbox برای افزودن به علاقه مندی وجود داره.
وقتی روی چک باکس تیک میزنی خوب مقدار yes به دیتابیس افزوده میشه و اون آیتم به علاقه مندی ها افزوده میشه.
اما با اسکرول کردن تیک چک باکس برداشته میشه و البته با دوباره وارد اون اکتیویتی شدن علاقه مندی ها نشان داده میشه.
چیکار باید بکنم که با اسکرول در برنامه تیک چک باکس برداشته نشه.
اگر از آرایه ها استفاده کنی مشکلی پیش نمیاد ولی اگه بخوای cursorAdapter استفاده کنم چطور باید این قضیه را درست کنم.
کد CursorAdapter :
public class MyAdapter extends CursorAdapter {
Context b;
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
}
@SuppressWarnings("unused")
@Override
public void bindView(View view, Context context, final Cursor cursor) {
// TODO Auto-generated method stub
TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);
tv1.setText(cursor.getString(2));
tv2.setText(cursor.getString(3));
final int pos = cursor.getPosition();
final CheckBox repeatChkBx = (CheckBox)view.findViewById(R.id.favorite_check);
String me = cursor.getString(cursor.getColumnIndex("like"));
if (me.equals("yes")) {
repeatChkBx.setChecked(true);
} else {
repeatChkBx.setChecked(false);
}
repeatChkBx.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
MyDatabase MyDatabase = new MyDatabase(b);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
cursor.moveToPosition(pos);
if (repeatChkBx.isChecked()) {
mydb.execSQL("update list set like = 'yes' where id = " + cursor.getString(1));
}else{
mydb.execSQL("update list set like = 'no' where id = " + cursor.getString(1));
}
}
});
}
protected Context getActivity() {
// TODO Auto-generated method stub
return null;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.item, parent, false);
}
}
عکس برنامه :
http://upir.ir/1393.2/listdata.gif
parvizwpf
چهارشنبه 17 اردیبهشت 1393, 20:10 عصر
من مشکلی شبیه داشتم. در واقع روی کرسر نبود. شما احتمالا تاکید میکنم احتمالا، نیازمند تعریف کلاسی بنام ViewHolder هستید. اینو سرچ کنید برای اطلاعات بیشتر.
hamedjj
چهارشنبه 17 اردیبهشت 1393, 21:58 عصر
فکر نکنم مشکل از viewholder یاشه
تو همین پروژه که از ArrayAdapter استفاده میشه هم استفاده شده و مشکل کاملا حل شده
مشکل اینه که وقتی مقادیر را در دیتابیس تغییر دادیم باید همان لحظه در چک باکس ذخیره شود
در آرایه ها مقدار ستون علاقه مندی را همان جا که دیتابیس آپدیت میشه را مساوی yes یا no قرار دادیم که مشکل حل شد
if(favotite.isChecked()) {
mydb.execSQL("update list set like = 'yes' where id = " + ids[position]);
likes[position] = "yes";
} else {
mydb.execSQL("update list set like = 'no' where id = " + ids[position]);
likes[position] = "no";
}
hamedjj
چهارشنبه 17 اردیبهشت 1393, 23:15 عصر
من پروژه را آپلود کردم که اگر کسی خواست ببینه:
در چند پست پایین تر
ali-star
پنج شنبه 18 اردیبهشت 1393, 00:34 صبح
من هم همین مشکل رو دارم بعدا دربارش جستجو می کنم اگه چیزی پیدا کردم اینجا می زارم...
smemamian
یک شنبه 28 اردیبهشت 1393, 23:40 عصر
سلام
گفتید که :
البته با دوباره وارد اون اکتیویتی شدن علاقه مندی ها نشان داده میشه.
من نمونه برنامه شما رو که دریافت کردم، یک item رو برای نمونه به علاقه مندی ها اضافه
کردم ولی وقتی برنامه رو بستم و دوباره باز کردم، تیک اون علاقه مندی نخورده بود !!!
به عبارت ساده، علاقه مندی item مورد نظر، در DB ذخیره نمیشه !
اگر جایی رو اشتباه می کنم بگید.
hamedjj
یک شنبه 28 اردیبهشت 1393, 23:47 عصر
آره مثل اینکه همین طور شده
نمیدونم قبلا اینطور نبود
الان درستش میکنم
hamedjj
دوشنبه 29 اردیبهشت 1393, 00:32 صبح
نمی دونم چرا درست نمیشه
قبلا مشکلی نداشت و من فقط دنبال checkbox بودم
حالا اینو فعلا بیخیال بشیم چون دیتابیس آپدیت بشه یا نشه این مشکل فکر نکنم ربطی بهش داشته باشه
یه جواب تو stackoverflow پیدا کردم که میگفت :
To avoid triggering callbacks on listener, you should unregister existing one by cb.setOnCheckedChangeListener(null) then set cb.setChecked(c.getBoolean(c.getColumnIndex("state"))) then cb.setOnCheckedChangeListener() again.
لینک:
http://stackoverflow.com/questions/13566648/checkbox-listener-in-listview-with-cursoradapter?rq=1
دقیقا میگه باید چیکار کنیم؟
hamedjj
دوشنبه 29 اردیبهشت 1393, 01:37 صبح
تغییر محتوای دیتابیس درست شد و لینک پروژه اصلاح شد :
فقط همین مشکلی که در بالا گفتم مونده
http://upir.ir/1393.2/listview-custom.rar
hamedjj
دوشنبه 29 اردیبهشت 1393, 01:53 صبح
کد CursorAdapter به این صورت تغییر کرد :
@Override
public void bindView(View view, Context context, final Cursor cursor) {
TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);
tv1.setText(cursor.getString(2));
tv2.setText(cursor.getString(3));
final int pos = cursor.getPosition();
final CheckBox repeatChkBx = (CheckBox)view.findViewById(R.id.favorite_check);
String likes = cursor.getString(cursor.getColumnIndex("like"));
if (likes.equals("yes")) {
repeatChkBx.setChecked(true);
} else {
repeatChkBx.setChecked(false);
}
repeatChkBx.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
MyDatabase mydatabase = new MyDatabase(b);
SQLiteDatabase mydb = mydatabase.getWritableDatabase();
cursor.moveToPosition(pos);
if (repeatChkBx.isChecked()) {
ContentValues cv = new ContentValues();
cv.put("like", "yes");
mydb.update("list", cv, "id ="+cursor.getString(1), null);
} else {
ContentValues cv = new ContentValues();
cv.put("like", "no");
mydb.update("list", cv, "id ="+cursor.getString(1), null);
}
mydb.close();
}
});
}
saeidpsl
دوشنبه 29 اردیبهشت 1393, 03:02 صبح
خوبه این کاملشو دو ماه پیش گذاشتم تو نمونه ها
(http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=1977385&viewfull=1#post1977385)
آقای poorman (http://barnamenevis.org/member.php?295320-poorman) نمی خواد پروژه تکرار رو دوباره آپلود کنی و بزاری (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=2016418&viewfull=1#post2016418) چه کاریه برادر من:اشتباه: من اسم hamedjj (http://barnamenevis.org/member.php?290105-hamedjj) که نوشتم تو دیگه اسم کسی هم ننوشتی دمت گرم:قهقهه:
hamedjj
دوشنبه 29 اردیبهشت 1393, 18:32 عصر
خوبه این کاملشو دو ماه پیش گذاشتم تو نمونه ها
(http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=1977385&viewfull=1#post1977385)
آقای poorman (http://barnamenevis.org/member.php?295320-poorman) نمی خواد پروژه تکرار رو دوباره آپلود کنی و بزاری (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=2016418&viewfull=1#post2016418) چه کاریه برادر من:اشتباه: من اسم hamedjj (http://barnamenevis.org/member.php?290105-hamedjj) که نوشتم تو دیگه اسم کسی هم ننوشتی دمت گرم:قهقهه:
saeidpsl (http://barnamenevis.org/member.php?127245-saeidpsl) جام من خودم برای poorman (http://barnamenevis.org/member.php?295320-poorman) یه پروژه ساختم و ازش خواستم که تکمیل کنه و تو نمونه برنامه ها بزاره
البته پروژه ای که من فرستادم با CursorAdapter درست شده بود که ازش خواستم علاقه مندی ها را درست کنه و بزاره تو سایت که پروژه را تغییر داد و با arrayAdapter درست کرد.
وگرنه خودت قبلا برام درست کرده بودی و فرستادی دیگه چه نیازی بود دوباره درست بشه
گفتم یه وقت سوتفاهم نشه.
بازم دمت گرم که جواب دادی ... ولی این پروژه هم که گذاشتی همون با arrayAdapter درست شده.
مگه مشکل cursorAdapter چیه که این مشکل را داره؟؟؟؟
تو stack یه نفر جواب ساده داده و بقیه تایید کردند که لینکش را گذاشتم
یه نگاه بندازین ببینین دقیقا چی میگه؟
من که نتونستم ازش استفاده کنم
http://stackoverflow.com/questions/13566648/checkbox-listener-in-listview-with-cursoradapter?rq=1
فدای دارین .....:چشمک:
poorman
دوشنبه 29 اردیبهشت 1393, 19:10 عصر
خوبه این کاملشو دو ماه پیش گذاشتم تو نمونه ها
(http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=1977385&viewfull=1#post1977385)
آقای poorman (http://barnamenevis.org/member.php?295320-poorman) نمی خواد پروژه تکرار رو دوباره آپلود کنی و بزاری (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=2016418&viewfull=1#post2016418) چه کاریه برادر من:اشتباه: من اسم hamedjj (http://barnamenevis.org/member.php?290105-hamedjj) که نوشتم تو دیگه اسم کسی هم ننوشتی دمت گرم:قهقهه:
شرمنده من پروژه شما رو ندیدم
میشه تفاوت پروژه ای که من آپلود کردم رو توی عنوان و استفاده از دیتابیس آماده دونست :چشمک:
----------------------------------------
حامد جان من جواب این بنده خدا رو دیدم توی سایت stack اما نفهمیدم دقیقا منظورش چیه
براش کامنت بذار تا بفهمه بیاد جوابت رو بده، چون فکر نمیکنم واسه پست جواب گذاشتی خبردار بشه
hamedjj
دوشنبه 29 اردیبهشت 1393, 19:52 عصر
شرمنده من پروژه شما رو ندیدم
میشه تفاوت پروژه ای که من آپلود کردم رو توی عنوان و استفاده از دیتابیس آماده دونست :چشمک:
----------------------------------------
حامد جان من جواب این بنده خدا رو دیدم توی سایت stack اما نفهمیدم دقیقا منظورش چیه
براش کامنت بذار تا بفهمه بیاد جوابت رو بده، چون فکر نمیکنم واسه پست جواب گذاشتی خبردار بشه
یه پست براش گذاشتم که بیا کد کامل را اینجا بزار و ما همچنان این مشکل را داریم
اما از طرف مدیریت پاک شد و گفت که این پاسخ به سوال نیست و باید در Ask question این سوال را مطرح کنی..
مشکل اینه که تو stack پیام خصوصی نمیشه داد
poorman
دوشنبه 29 اردیبهشت 1393, 20:15 عصر
گفتم دیگه، کامنت بده، پست نذار
زیر جوابی که داده یه گزینه هست add comment اونجا واسش بنویس
hamedjj
دوشنبه 29 اردیبهشت 1393, 20:36 عصر
گفتم دیگه، کامنت بده، پست نذار
زیر جوابی که داده یه گزینه هست add comment اونجا واسش بنویس
میدونم
فقط مشکل اینه که برای کامنت گذاری باید حداقل 50 امتیاز (یا شهرت) داشته باشی که من 19 تا بیشتر ندارم:لبخند:
you must have 50 reputation to comment
hamedjj
دوشنبه 29 اردیبهشت 1393, 20:57 عصر
یه سوال دیگه فرستادم و به لینک بالا اشاره کردم و گفتم که برای من درست نمیشه
دو نفر کامنت گذاشتند میگن که اون از cursorAdapter استفده نمیکنه داره از CustomAdapter استفاده میکنه که همون ArrayAdapter را میگن دیگه.
ولی فکر نکنم حرفشون درست باشه
از bindview پیداست که داره از cursorAdapter استفاده میکنه :متفکر:
saeidpsl
دوشنبه 29 اردیبهشت 1393, 21:05 عصر
saeidpsl (http://barnamenevis.org/member.php?127245-saeidpsl) جام من خودم برای poorman (http://barnamenevis.org/member.php?295320-poorman) یه پروژه ساختم و ازش خواستم که تکمیل کنه و تو نمونه برنامه ها بزاره
البته پروژه ای که من فرستادم با CursorAdapter درست شده بود که ازش خواستم علاقه مندی ها را درست کنه و بزاره تو سایت که پروژه را تغییر داد و با arrayAdapter درست کرد.
وگرنه خودت قبلا برام درست کرده بودی و فرستادی دیگه چه نیازی بود دوباره درست بشه
گفتم یه وقت سوتفاهم نشه.
بازم دمت گرم که جواب دادی ... ولی این پروژه هم که گذاشتی همون با arrayAdapter درست شده.
مگه مشکل cursorAdapter چیه که این مشکل را داره؟؟؟؟
تو stack یه نفر جواب ساده داده و بقیه تایید کردند که لینکش را گذاشتم
یه نگاه بندازین ببینین دقیقا چی میگه؟
من که نتونستم ازش استفاده کنم
http://stackoverflow.com/questions/13566648/checkbox-listener-in-listview-with-cursoradapter?rq=1
فدای دارین .....:چشمک:
با اون هم میشه ولی بیشتر دیدم از arry استفاده کردن حتمآ بهتره حالا arry مگه چشه ؟
شرمنده من پروژه شما رو ندیدم
میشه تفاوت پروژه ای که من آپلود کردم رو توی عنوان و استفاده از دیتابیس آماده دونست :چشمک:
----------------------------------------
حامد جان من جواب این بنده خدا رو دیدم توی سایت stack اما نفهمیدم دقیقا منظورش چیه
براش کامنت بذار تا بفهمه بیاد جوابت رو بده، چون فکر نمیکنم واسه پست جواب گذاشتی خبردار بشه
دمت گرم فدای سرت جدی نگفتم :)
hamedjj
دوشنبه 29 اردیبهشت 1393, 22:36 عصر
با اون هم میشه ولی بیشتر دیدم از arry استفاده کردن حتمآ بهتره حالا arry مگه چشه ؟
مشکلی نداره
فقط می خوام جواب این قضیه را دربیارم .... وگرنه برای من فرقی نمیکنه
فدا
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.