PDA

View Full Version : خواش میکنم کمک کنید : آپدیت لیست ویو



1masoud1
یک شنبه 19 بهمن 1393, 22:53 عصر
من یک برنامه محتوایی دارم می نویسم که در اون یک لیست ویو سفارشی برای لیست علاقه مندی ها دارم در هر آیتمی آیکونی واسه حذف از لیست علاقه مندی ها قرار دادم ولی وقتی روی حذف کردن کلیک می کنم لیست آپدیت نمیشه سایت Stackoverflow رو خیلی گشتم از notfydatasetchanged هم استفاده کردم ولی بازم لیست آپدیت نشد که نشد
فقط موقعی آپدیت میشه که یکبار دکمه back رو بزنم و دوباره صفحه علاقه مندی ها رو باز کنم اینجوری لیست به روز میشه

چه راهی هست که یا لیست رو آپدیت بشه یا بشه اکتیویتی مربوطه یک بار خودش لود بشه؟؟

خیلی ممنون

saeidd
دوشنبه 20 بهمن 1393, 07:39 صبح
همون کدی رو که در OnCreate اکتیویتی نوشتی و موقع باز کردن علاقه مندیها اجرا میشه، باید تو Onclick آیکون حذف بنویسی.
یعنی بصورت یه تابع درش بیار و در هر دو جا صداش کن.

esideli
دوشنبه 20 بهمن 1393, 10:27 صبح
من یک برنامه محتوایی دارم می نویسم که در اون یک لیست ویو سفارشی برای لیست علاقه مندی ها دارم در هر آیتمی آیکونی واسه حذف از لیست علاقه مندی ها قرار دادم ولی وقتی روی حذف کردن کلیک می کنم لیست آپدیت نمیشه سایت Stackoverflow رو خیلی گشتم از notfydatasetchanged هم استفاده کردم ولی بازم لیست آپدیت نشد که نشد
فقط موقعی آپدیت میشه که یکبار دکمه back رو بزنم و دوباره صفحه علاقه مندی ها رو باز کنم اینجوری لیست به روز میشه

چه راهی هست که یا لیست رو آپدیت بشه یا بشه اکتیویتی مربوطه یک بار خودش لود بشه؟؟

خیلی ممنون

شما باید آداپتر و لیست ویو رو دوباره بعد از تغییرات (مثلا انتهای کدهای حذف) سِت کن.

tux-world
دوشنبه 20 بهمن 1393, 10:47 صبح
کد آداپتری که نوشتی اشتباهه. باید اینجا بزاری اداپتر رو ببینیم

1masoud1
دوشنبه 20 بهمن 1393, 12:47 عصر
همون کدی رو که در OnCreate اکتیویتی نوشتی و موقع باز کردن علاقه مندیها اجرا میشه، باید تو Onclick آیکون حذف بنویسی.
یعنی بصورت یه تابع درش بیار و در هر دو جا صداش کن.

میشه یه مثالی بزنی

1masoud1
دوشنبه 20 بهمن 1393, 12:48 عصر
شما باید آداپتر و لیست ویو رو دوباره بعد از تغییرات (مثلا انتهای کدهای حذف) سِت کن.

میشه یه مثالی بزنی

esideli
سه شنبه 21 بهمن 1393, 13:28 عصر
میشه یه مثالی بزنی
توی کد زیر یه آداپتر تعریف و مقدار دهی شده و بعد آداپتر روی لیست ویو ست شده . شما باید یک خط بعد از کدهایی که باعث تغییرات توی لیست ویوت میشه دوباره اطلاعات رو بگیری (مثلا از دیتابیس) و آداپتر رو از نو مقدار دهی کنی و به لیست ویو بدی. بهتر هست که برای این کار یه متد بسازی و هر جا نیاز به رفرش لیست ویو داشتی فقط اون متد رو صدا بزنی.


ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);
MylistView.setAdapter(adapter);

1masoud1
سه شنبه 21 بهمن 1393, 19:54 عصر
این متدی که من با اون اطلاعات رو از دیتابیس می گیریم و داخل آرایه ذخیره می کنم:



public void refresh() {

db.open();

if (count==0){
finish();
Toast.makeText(PageFavorite.this, "لیست علاقه مندی های خالی است", Toast.LENGTH_SHORT).show();
}

for (int i = 0; i < count; i++) {
person[i] = db.favorite_display(i, 1);

favorite[i] = db.favorite_display(i, 5);
page[i] = db.count_item_page(person[i].toString()) + "";

}

db.close();
FavoriteShow myadapter = new FavoriteShow(this, person );
lv.setAdapter(myadapter);

}


این ها هم متدی در کلاس دیتابیسم که تو متد بالا استفاده شده:



public String favorite_display(int row, int field) {
Cursor cu = mydb.rawQuery("SELECT * FROM " + TableDB
+ " WHERE favorite = 1 GROUP BY karafarin ORDER BY id", null);
cu.moveToPosition(row);
String result = cu.getString(field);
return result;
}


ارسال به کلاس آداپتر برای ساخت لیست ویوی سفارشی :




FavoriteShow myadapter = new FavoriteShow(this, person );
lv.setAdapter(myadapter);




متد onclick() برای حذف از لیست علاقه مندی ها:



@Override
public void onClick(View v) {
db.open();
db.favorite_update(person[position], "0");
notifyDataSetChanged();

db.close();


}



متد آپدیت دیتابیس (استفاده شده از متد بالا):




public void favorite_update(String karafarin, String value) {

ContentValues cv = new ContentValues();
cv.put("favorite", value);
mydb.update(TableDB, cv, " karafarin = '" + karafarin + "'", null);

}


همین مشکل کوفتی حل بشه دیگه آماده است واسه انتشار
خیلی ممنون

esideli
سه شنبه 21 بهمن 1393, 20:30 عصر
شما اگه مشکلت برای آپدیت لیست ویو هست کد متد onclick() رو این جوری تغییر بده انشاا.. درست می شه :

@Override
public void onClick(View v) {
db.open();
db.favorite_update(person[position], "0");


count= مقدار دهی شود;

if (count==0){

db.close();
finish();
Toast.makeText(PageFavorite.this, "لیست علاقه مندی های خالی است", Toast.LENGTH_SHORT).show();
}

for (int i = 0; i < count; i++) {
person[i] = db.favorite_display(i, 1);

favorite[i] = db.favorite_display(i, 5);
page[i] = db.count_item_page(person[i].toString()) + "";

}



FavoriteShow myadapter = new FavoriteShow(this, person );
lv.setAdapter(myadapter);




db.close();


}