View Full Version : حذف آیتم های ListView سفارشی از درون برنامه
meysam jahedi
یک شنبه 11 آبان 1393, 21:49 عصر
سلام
اگه یه لیست ویو سفارشی داشته باشیم که مثلا رکورد های یک دیتابیس رو نشون میده ، امکانش هست با کلیک روی هر آیتم ، اون آیتم رو از لیست حذف کنیم؟ با چه دستوری؟
tux-world
یک شنبه 11 آبان 1393, 22:45 عصر
اینا که چیزی نیستن راحت با یه گوگل ساده میتونی بفهمی. چیزایی رو بپرس که واقعا از پسشون بر نمیایی
SASAN_AH
یک شنبه 11 آبان 1393, 23:28 عصر
شما تو كد ديتابيس يه متد براي حذف ركورد بساز بعد در كدهاي ليست ازش استفاده من
نمونه زياده
meysam jahedi
یک شنبه 11 آبان 1393, 23:50 عصر
شما تو كد ديتابيس يه متد براي حذف ركورد بساز بعد در كدهاي ليست ازش استفاده من
نمونه زياده
با یه آداپتر رکورد دیتابیس رو حذف میکنم اما در ادامش نمیدونم چطور بعدش لیست ویو بروز بشه
SASAN_AH
دوشنبه 12 آبان 1393, 09:40 صبح
اداپتورت رو بروز كن بعد حذف
meysam jahedi
دوشنبه 12 آبان 1393, 14:19 عصر
توسط یه آداپتر لیست ویو سفارشی رو پر میکنم ، دستورات رو میزارم :
public class MyAdapterFav extends BaseAdapter {
Activity a;
String[] story_name;
String[] FAV;
int[] kodd;
String[] page_count;
String[] idarray;
private mydatabase mydata;
private SQLiteDatabase mydb;
public MyAdapterFav (Activity act, String[] id,String[] names,String[] pgcount,String[] alaghe,int[] kod){
a=act;
this.story_name=names;
this.page_count=pgcount;
this.idarray=id;
this.FAV=alaghe;
this.kodd=kod;
this.mydata = new mydatabase(act.getApplicationContext());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return story_name.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int pos, View convertView, ViewGroup arg2) {
View mylist;
LayoutInflater inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
if (convertView == null) {
mylist = new View(a);
mylist = inflater.inflate(R.layout.list_fav_row, null);
TextView textView2 = (TextView) mylist.findViewById(R.id.list_fav_row_txt);
TextView textView3 = (TextView) mylist.findViewById(R.id.list_fav_row_pagecount);
final ImageView fav=(ImageView) mylist.findViewById(R.id.list_fav_row_del);
fav.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
mydb=mydata.getWritableDatabase();
mydb.execSQL("UPDATE tdb SET FAV='0'WHERE kod="+kodd[pos]);
mydb.close();
Toast.makeText(a, "از لیست علاقمندی ها حذف شد", Toast.LENGTH_SHORT).show();
FAV[pos]="0";
}
});
textView2.setText(story_name[pos]);
textView3.setText(page_count[pos]);
} else {
mylist = (View) convertView;
}
return mylist;
}
و با refresh زیر از دستورات بالا استفاده میکنم :
public void refresh(){
mydb=mydata.getReadableDatabase();
Cursor recdaryafti = mydb.rawQuery("select * from tdb where FAV='1' group by NAME order by id ", null);
NAME = new String[recdaryafti.getCount()];
pgcount = new String[recdaryafti.getCount()];
ID = new String[recdaryafti.getCount()];
FAMILY=new String[recdaryafti.getCount()];
KOD=new int[recdaryafti.getCount()];
FAV=new String[recdaryafti.getCount()];
if(recdaryafti.moveToFirst()){
do{
NAME[i] = recdaryafti.getString(1);
FAMILY[i] = recdaryafti.getString(2);
ID[i] = recdaryafti.getString(0);
FAV[i] = recdaryafti.getString(4);
KOD[i] = Integer.parseInt(recdaryafti.getString(5));
pgcount[i] = Story_page_count(NAME[i].toString())+"";
i++;
}
while(recdaryafti.moveToNext());
}
recdaryafti.close();
mydb.close();
setListAdapter(new MyAdapterFav(this, ID, NAME, pgcount,FAV,KOD));
}
از طریق فراخوانی کلی خط زیر از این مجموعه استفاده میکنم و لیست ویو رو پر میکنم
setListAdapter(new MyAdapterFav(this, ID, NAME, pgcount,FAV,KOD));
حالا مشکل و سوال من اینجاست که وقتی در همون دستورات آداپتور بالا قسمت اول یعنی دستورات زیر با دستور sql یه 1 رو به 0 تبدیل میکنم و سطری رو از لیست علاقمندی ها (سطری از لیست ویو ) رو حذف میکنم ،
سوال اصلی ::گیج: چطور بعد از اینکه toast گفت حذف شد ، این لیستم بعدش تو لیست ویو بروز بشه سریع ؟
(من از آداپتر کلا برا بروز رسانی لیست ویو استفاده کردم حالا چطور از دل خود آداپتر فراخوانیش کنم؟)
fav.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
mydb=mydata.getWritableDatabase();
mydb.execSQL("UPDATE tdb SET FAV='0'WHERE kod="+kodd[pos]);
mydb.close();
Toast.makeText(a, "از لیست علاقمندی ها حذف شد", Toast.LENGTH_SHORT).show();
FAV[pos]="0";
}
});
tux-world
دوشنبه 12 آبان 1393, 22:52 عصر
وقتی که از setAdapter استفاده میکنی براش مهم نیست چیزی رو که به یه آداپتر داری ست میکنی خالی باشه یا پر این از این و اینکه وقتی که ست کردی اگه دوباره ازش استفاده کنی قائدتا دوباره لیست رو به روز میکنه ولی به شرطی و شروطها. اینکه اول نباید دوباره از اون برای رفرش استفاده کنی از این دستور باید استفاده کنی
adapter.notifyDataSetChanged ();
و اینکه خود اون آرایه ای رو که داری رفرش میکنی به لیست باید بچسبونی کدت رو یه خورده بد نوشتی مثلا اینکه بجای پاس دادن یه کلاس به اداپتور بهتره یه کلاس واسط براش تعریف کنی ساختارش رو اونجا تعیین کنی و یه متغیر بهش نسبت بدی مثلا items بعد میتونی همین متغیر رو با رفرش به اداپتر بچسوبی و مشکلت حل میشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.