بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

آپدیت لیست ویو(حل نشده)

مدیریت گفتگو
amir Alu 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام.

 

من یک لیست ویو دارم که نمایش اطلاعاتش از طریق دیتابیس فراهم میشه ، وقتی روی هر کدام از ایتم های لیست ویو کلیک میشه گزینه ای باز میکنم که بشه آیتم ها حذف کرد. و حذف هم میشه از داخل دیتابیس ولی لیست ویو آپدیت نمیشه تا این که برنامه یک بار ببندم و دوباره باز کنم.

حالا سوالم اینه، چی کار کنم که بعد حذف یک مورد از دیتابیس ، لیست ویوی من آپدیت بشه؟

نظرات

hamed 11 سال پیش
آداپتر را notifydataSetChange کرده اید؟ می بایست پس از اعمال تغییرات اداپتر را با این عمل به روز رسانی کنید.
amir Alu 11 سال پیش
بله این کار را انجام داده ام. درست نشده
Denabit 11 سال پیش
موقعی که یک مورد رو حذف کردید دوباره اطلاعات موجود در دیتابیس رو بخونید و بعد notifydataSetChange کنید

پاسخ‌ها 2

Denabit 11 سال پیش

با استفاده از کد زیر میتونید این کار رو انجام بدید

 Delete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
AlertDialog.Builder builder = new AlertDialog.Builder(G.currentActivity);
builder.setTitle("حذف").setMessage("حذف شود؟");
builder.setPositiveButton("بله", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {


G.database.execSQL("DELETE FROM person WHERE person_name='" + customername + "'");
adapter.remove(item);
Toast.makeText(G.currentActivity, "حذف شد", 2000).show();
}
});
builder.setNegativeButton("خیر", null);

builder.setIcon(android.R.drawable.ic_dialog_alert).show();
}
});

نظرات

amir Alu 11 سال پیش
بله مشکل من کاملا حل شد. ممنونم دوست من.
amir Alu 11 سال پیش
من کد بالا رو داخل adapter و متد fill نوشتم. واسه حذف کردن این مدل جواب میده اما لیست ویو آپدیت نمیشه. انگار ما دستی داریم یک ایتم از لیست حذف میکنیم. و با حذف از دیتابیس اینجا تغییر نمیکنه. باید چی کار کرد؟
amir Alu 11 سال پیش
کدی که نوشتم در زیر قرار دادم تا بشه دقیقتر بررسی کرد. امیدوارم دوستان بتونن به من کمک کنن تا مشکل من حل بشه اخه شدید کارم گیر کرده به درست شدن این کد
amir Alu 11 سال پیش

ای کد من هست

 


public class AdapterData extends ArrayAdapter<StructData> {

public AdapterData(ArrayList<StructData> array) {
super(G.context, R.layout.date_list_layout, array);
}


private static class ViewHolder {

public ViewGroup layoutRoot;
public TextView txt1;
public TextView txt2;
public TextView txt3;
public ImageView img1;
public ImageView img2;



public ViewHolder(View view) {
txt1 = (TextView) view.findViewById(R.id.txt1);
txt2 = (TextView) view.findViewById(R.id.txt2);
txt3 = (TextView) view.findViewById(R.id.txt3);
layoutRoot=(ViewGroup) view.findViewById(R.id.lay_list_item);
img1=(ImageView) view.findViewById(R.id.img1);
img2=(ImageView) view.findViewById(R.id.img2);
}


public void fill(final ArrayAdapter<StructData> adapter, final StructData item, final int position) {
txt1.setText(item.txt1);
txt2.setText(item.txt2);
txt3.setText(item.txt3);

if(item.img){
img1.setVisibility(View.VISIBLE);
img2.setVisibility(View.INVISIBLE);
}else{
img1.setVisibility(View.INVISIBLE);
img2.setVisibility(View.VISIBLE);
}

if(!item.done){
layoutRoot.setBackgroundResource(R.drawable.list_item);
}else{
layoutRoot.setBackgroundResource(R.drawable.list_item2);
}

layoutRoot.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub

final Dialog dialog=new Dialog(G.currentActivity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.dialog_item);


dialog.findViewById(R.id.layoutCloseDialog).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.findViewById(R.id.layoutDeleteDialog).setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
G.database.delete("gharz", "_id="+item._id, null);
adapter.remove(item);
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});
dialog.findViewById(R.id.layoutbackColor).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
G.database.execSQL("UPDATE gharz SET done='true' WHERE _id='"+item._id+"'");
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});
dialog.show();




}

});


}
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

StructData item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.date_list_layout, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.fill(this, item, position);


Animation anim =null;

anim=AnimationUtils.loadAnimation(G.context, R.anim.push_left_in);
convertView.startAnimation(anim);

anim=null;
return convertView;
}
}

مشکل من الان این قسمت هست

 dialog.findViewById(R.id.layoutbackColor).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
G.database.execSQL("UPDATE gharz SET done='true' WHERE _id='"+item._id+"'");
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});

وقتی این قسمت اجرا میشه مقدار done برابر true میشه و قانونن باید رنگ بک گراند عوض بشه چون بالا این رو نوشتم اما این اتفاق نمی افتد مگر این که یک بار برنامه بسته و مجدد باز بشه

نظرات

MeY3am 11 سال پیش
شما اون list_item2 رو به list_item_two تغییر بدین ببینید تغییر میکنه یا همچنان مشکل پابرجاست!
MeY3am 11 سال پیش
البته در Resource مربوطه هم باید به list_item_two نامگذاری کنید
amir Alu 11 سال پیش
هنوز پابرجاست. این رو هم تست کردم.
amir Alu 11 سال پیش
این کار رو کردم جواب نداده، و این قسمت کد کار میکنه چون وقتی برنامه باز و بسته میشه همین قسمت اجرا میشه و list_item2 کار میکنه.
amir Alu 11 سال پیش
راسی واقعا ببخشید این موقع دارم مزاحم میشم، الان 4 صبح هست و میدونم زمان درستی نیست، واقعا ممنونم از این که وقت میزارین و بررسی میکنید
MeY3am 11 سال پیش
شما مقدار اولیه done رو کجا تعریف کردین که اگه مخالفش اتفاق بیفته رنگ بک گراند تغییر کنه؟
amir Alu 11 سال پیش
مقدار داخل mainActivity در جایی که اطلاعات به دیتابیس وارد میشه برابر false گذاشتم و بصورت پیشفرض false وارد میشود

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .