/ / ListView Uložiť stav kontrolovanej schránky - android, listview

ListView Uložiť stav kontrolovaného boxu - android, listview

Urobil som zaškrtávacie políčko v zozname Listview. Keď však aplikáciu vypnem a znovu otvorím, nezachráni stav položiek, ktoré som uviedol.

Avšak to pre mňa nefungovalo, a nemôžem toZdá sa, že nájdu odpoveď, ako vyriešiť tento problém. Ak mi niekto môže pomôcť prostredníctvom kódu pre ListAdapter Activty, ako je uvedené nižšie, bolo by dobré.

public class ListAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList<Product> objects;

ListAdapter(Context context, ArrayList<Product> products) {
ctx = context;
objects = products;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return objects.size();
}

@Override
public Object getItem(int position) {
return objects.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.item, parent, false);
}

Product p = getProduct(position);

((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);

CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbBox);
cbBuy.setOnCheckedChangeListener(myCheckChangList);
cbBuy.setTag(position);
cbBuy.setChecked(p.box);
return view;
}

Product getProduct(int position) {
return ((Product) getItem(position));
}

ArrayList<Product> getBox() {
ArrayList<Product> box = new ArrayList<Product>();
for (Product p : objects) {
if (p.box)
box.add(p);
}
return box;
}

OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
getProduct((Integer) buttonView.getTag()).box = isChecked;
}
};
}

Nie som si istý, či som urobil niečo nesprávne, alebo keď som ho vložil na nesprávne miesto, alebo ak je celý kód nesprávny.

Toto je verzia upraveného riešenia pomocou zdieľaných predvolieb:

public class ListAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList<Product> objects;

ListAdapter(Context context, ArrayList<Product> products) {
ctx = context;
objects = products;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return objects.size();
}

@Override
public Object getItem(int position) {
return objects.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.item, parent, false);
}

final Product p = getProduct(position);

((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);

final CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbBox);
SharedPreferences settings  = ctx.getSharedPreferences("data",ctx.MODE_PRIVATE);
boolean Checked = settings.getBoolean(p.name, false);
cbBuy.setChecked(Checked);



cbBuy.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(cbBuy.isChecked()==true){
SharedPreferences settings = ctx.getSharedPreferences("data",Context.MODE_PRIVATE);
settings.edit().putBoolean(p.name, true).commit();
Toast.makeText(ctx, "You Selected" + p.name, Toast.LENGTH_SHORT).show();

}else{
SharedPreferences settings = ctx.getSharedPreferences("data", Context.MODE_PRIVATE);
settings.edit().putBoolean(p.name, false).commit();
Toast.makeText(ctx, "You Deselected" +p.name, Toast.LENGTH_SHORT).show();

}
}
});{

return view;

}

}

odpovede:

1 pre odpoveď č. 1

Pole nie sú trvalé ukladanie. Ak chcete pretrvávať dáta v rámci spustenia, musíte ho uložiť a zaviesť na začiatok.