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

ذخیره مقدار چکباکس در لیست ویو

mehdi31075  8 سال پیش  8 سال پیش
0 0

سلام.در لیست ویویی شبیه به چیزی که استاد تو آموزش لیست ویو داشت دارم که توش یه checkboxوجود داره .من میخواستم با sharedpreferencesها مقدارtrueیاfalseبودنitem.doneرو ذخیره کنم.با کدی که نوشتم ذخیره میشه ولی به جای این که فقط همون چکباکسی که مدنظرمه تغییر پیدا کنه و مقدارش عوض بشه مقدار همه چکباکس ها عوض میشه.به طوری که انگار همه چکباکس ها رو داره یه چکباکس فرض می کنه و آخرین تغییر روی هر کدوم رو بر روی همه اعمال می کنه.ممنون از راهنمایی شما.این هم کد من:

 

public class AdapterNote extends ArrayAdapter<StructNote> {
public static SharedPreferences settings;
public static Editor editor;

public AdapterNote(ArrayList<StructNote> array){

super(G.context,R.layout.adapter_notes,array);

}

private static class ViewHolder{

public ViewGroup layoutRoot;
public TextView txtTitle;
public TextView txtDescription;
public CheckBox chkDone;

public ViewHolder(View view){

txtTitle = (TextView)view.findViewById(R.id.txtTitle);
txtDescription = (TextView)view.findViewById(R.id.txtDescription);
chkDone = (CheckBox)view.findViewById(R.id.chkDone);
layoutRoot =(ViewGroup)view.findViewById(R.id.layoutRoot);
}

public void fill(ArrayAdapter<StructNote> adapter,final StructNote item,final int position){
txtTitle.setText(item.title);
txtDescription.setText(item.description);
chkDone.setChecked(item.done);
txtTitle.setTypeface(G.rezvan);

txtDescription.setTypeface(G.rezvan);
layoutRoot.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent =new Intent(G.currentActivity, ActivityTest.class);
intent.putExtra("POSITION", position);
G.currentActivity.startActivity(intent);

}
});
settings = PreferenceManager.getDefaultSharedPreferences(G.currentActivity);
item.done = settings.getBoolean("ITEM_DONE", false);
chkDone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
CheckBox checkbox = (CheckBox) view;
item.done=checkbox.isChecked();
editor= settings.edit();
if(item.done){editor.putBoolean("ITEM_DONE", true);}
else{editor.putBoolean("ITEM_DONE", false);}
editor.commit();
}
});
editor= settings.edit();
if(item.done){editor.putBoolean("ITEM_DONE", true);}
else{editor.putBoolean("ITEM_DONE", false);}

}}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructNote item = getItem(position);
if(convertView==null){
convertView=G.layoutInfalter.inflate(R.layout.adapter_notes,parent,false);
holder=new ViewHolder(convertView);
convertView.setTag(holder);
}
else{
holder=(ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
b.fat  8 سال پیش
0 0

در مرحله ای که تنظیمات رو ذخیره می کنید، رکر نمی کنید که اون تنظیم دقیقا مربوط به کدام مورد از لیست است.

برنامه شما کلا یک کلید به اسم ITEM_DONE دارد که یک مقدار true یا false را می گیرد. برنامه از کجا باید بفهمد که این مقدار، مربوط به کدام یک از ده ها آیتم داخل لیست است؟!

به نظرم راه اصولی انجام چنین پروژه ای استفاده از دیتا بیس است. اما اگر بخواهیم الزاما با sharedPreferences پروژه را انجام بدهیم، آنگاه برای هر آیتم یک کلید جدا نیاز خواهیم داشت. مثلا برای ذخیره تنظیمات بنویسید:

  editor.putBoolean("ITEM_DONE" + position,false);

خوب البته این تغییر همان طوری که عرض کردم اصولی نیست. چون ممکنه به دلایل مختلف آیتم های لیست جابجا بشوند. شاید بهتره هر آیتم یک id اختصاصی هم داشته باشد.

پاسخ به سوال 
mehdi31075  8 سال پیش
0 0

بله درسته ممنون


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