Ich habe das Problem, wo ausgewählte Elemente und ich scrollen starten sie abgewählt werden, sehe ich ein paar andere Beiträge über diese einige von ihnen gesagt, in ein Array und so zu setzen, aber ich habe es versucht ein paar scheinen nicht zu arbeiten.ListView Items beim Blättern deaktiviert
Mein Code:
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(final 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;
}
}
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;
}
};
}
Produktklasse:
public class Product {
String name;
String price;
int image;
boolean isSelected = false;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected)
{
isSelected = selected;
}
Product(String _describe, String _price, int _image, boolean _box) {
name = _describe;
price = _price;
image = _image;
isSelected = _box;
}
}
Hauptaktivität
public class MainActivity extends AppCompatActivity {
ArrayList<Product> products = new ArrayList<Product>();
ListAdapter boxAdapter;
private SharedPreferences mPrefs;
private String mData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
fillData();
boxAdapter = new ListAdapter(this, products);
ListView lvMain = (ListView) findViewById(R.id.lvMain);
lvMain.setAdapter(boxAdapter);
}
void fillData() {
products.add(new Product("Al", "5230%", R.drawable.ic_launcher, false));
products.add(new Product("Al", "5230%", R.drawable.ic_launcher, false));
products.add(new Product("Alf", "5230%", R.drawable.ic_launcher, false));
products.add(new Product("Alfa", "5230%", R.drawable.ic_launcher, false));
products.add(new Product("Alfae", "5120%", R.drawable.ic_launcher, false));
products.add(new Product("Alfsdfsdfakher", "50435%", R.drawable.ic_launcher, false));
products.add(new Product("Alfasdfsdfkher", "5123120%", R.drawable.ic_launcher, false));
products.add(new Product("Alfasdfsdfkher", "5%", R.drawable.ic_launcher, false));
products.add(new Product("Alfaksdfsdfher", "11250%", R.drawable.ic_launcher, false));
/*for (int i = 1; i <= 20; i++) {
products.add(new Product("Product " + i, i * 100,
R.drawable.ic_launcher, false));
}*/
}
/*public void showResult(View v) {
String result = "Selected Product are :";
int totalAmount=0;
for (Product p : boxAdapter.getBox()) {
if (p.box){
result += "\n" + p.name;
totalAmount+=p.price;
}
}
Toast.makeText(this, result+"\n"+"Total Amount:="+totalAmount, Toast.LENGTH_LONG).show();
}*/
}
Sie sollten ein Listview-Halter Muster verwenden. Etwas wie das: https://stackoverflow.com/questions/28730417/making-a-listview-holder-for-mainactivity – RonTLV