مشکل اساسی رفرش محتویات لیست ویو
سلام دوستان.
من یه مشکلی تو لیست ویو دارم تو stackoverflow هم پرسیدم جوابی که بهم نتیجه بده نگرفتم. اینجا هم چند نفر پرسیدن ولی انگار کسی به نتیجه قطعی نرسیده. خواهشا یه هم افزایی بکنیم جوابش کامل مشخص شه.
من یه لیست ویو دارم که به ازای هر آیتم یه دکمه حذف واسش تعریف کردم. وقتی کاربر روی دیلیت کلیک میکنه قراره اون آیتم از تو دیتابیس و همچنین لیست نمایش برنامه حذف شه. در عمل آیتم با موفقیت از روی دیتابیس پاک میشه اما توی لیست ویو دچار مشکل میشه.
مشکلش به این صورته که اگه مثلا سه تا آیتم با titleهای text1,tex2,text3 تو لیست داشته باشیم و روی دکمه حذف کنار text2 کلیک کنیم اون آیتم از لیست و همچنین دیتابیس حذف میشه اما لیست طوری رفرش میشه که ما سه آیتم text1,text3,text3 خواهیم داشت! یعنی انگار text3 میاد بالا جای text2 رو میگیره اما تو جای قبلی خودش هم میمونه! جالب اینه که وقتی از برنامه خارج میشم و دوباره برمیگردم مشکل برطرف میشه. فک میکنم مشکل باید تو قسمت viewholder باشه. خواهشا یه بررسی کنید جواب رو بزارید مطمئنا خیلی ها استفاده خواهند کرد. اینم از کدهام:
public class AdapterNote extends ArrayAdapter {
public AdapterNote(ArrayList notes) {
super(G.context, R.layout.adapter_note, notes);
}
private class ViewHolder {
TextView txtTitle;
ImageView imgDelete;
public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.txtTitle);
imgDelete = (ImageView) view.findViewById(R.id.imgDelete);
}
public void fill(final ArrayAdapter adapter, final StructNote item, final int position) {
txtTitle.setText(item.title + "");
imgDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
G.notes.remove(item);
adapter.remove(item);
Commands.deleteDataFromDatabase(item.id);
G.adapter.notifyDataSetChanged();
}
});
}
}
@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_note, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
نمونه
imgdelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//ایتم مورد نظر از اداپتر حذف می شود در نیجه از جی.نات هم حذف میشود و اداپتر خودش "ناتی فای دیتا ست چینج" می شود
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "" + item.id));
Commands.removeData(params);
adapter.remove(item);
}
});
Class Commands
public static void removeData(ArrayList<NameValuePair> params) {
WebServiceForPost.readUrls("http://" + G.ip + "/note-server/service.php?action=remove", params);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .