آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

amir Alu  11 سال پیش  11 سال پیش
+3 0

سلام.

 

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

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

0 0
آداپتر را notifydataSetChange کرده اید؟ می بایست پس از اعمال تغییرات اداپتر را با این عمل به روز رسانی کنید. (11 سال پیش)
+3 0
بله این کار را انجام داده ام. درست نشده (11 سال پیش)
0 0
موقعی که یک مورد رو حذف کردید دوباره اطلاعات موجود در دیتابیس رو بخونید و بعد notifydataSetChange کنید (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Denabit  11 سال پیش
+1 0

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

 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();
}
});
0 0
بله مشکل من کاملا حل شد. ممنونم دوست من. (11 سال پیش)
0 0
من کد بالا رو داخل adapter و متد fill نوشتم. واسه حذف کردن این مدل جواب میده اما لیست ویو آپدیت نمیشه. انگار ما دستی داریم یک ایتم از لیست حذف میکنیم. و با حذف از دیتابیس اینجا تغییر نمیکنه. باید چی کار کرد؟ (11 سال پیش)
0 0
کدی که نوشتم در زیر قرار دادم تا بشه دقیقتر بررسی کرد. امیدوارم دوستان بتونن به من کمک کنن تا مشکل من حل بشه اخه شدید کارم گیر کرده به درست شدن این کد (11 سال پیش)
پاسخ به سوال 
amir Alu  11 سال پیش
0 0

ای کد من هست

 


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 میشه و قانونن باید رنگ بک گراند عوض بشه چون بالا این رو نوشتم اما این اتفاق نمی افتد مگر این که یک بار برنامه بسته و مجدد باز بشه

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

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