Я знаю, что это действительно старая тема, но ответы, которые я нашел на этот вопрос, были не очень хорошими. Мне понадобилось некоторое время, чтобы найти работоспособное решение из двух ответов. Я просто хотел поделиться рабочим кодом, если любой другой нуб пытается выяснить, как сохраняется состояние переключателя при прокрутке.
private class MyListAdapter extends ArrayAdapter<Product> {
boolean [] switchState= new boolean[100] ;
public MyListAdapter() {
super(ProductSelectActivity.this, R.layout.item_view, myProducts);
}
public View getView( int position, View convertView, ViewGroup parent) {
// Make sure we have a view to work with (may have been given null)
ViewHolder holder;
View itemView = convertView;
if (itemView == null) {
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
View row= itemView;
holder= new ViewHolder(row);
itemView.setTag(holder);
holder.switchButton = (ToggleButton) itemView.findViewById(R.id.favorite_button);
}
else
{
holder = (ViewHolder) itemView.getTag();
}
holder.switchButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
int index = (Integer) v.getTag();
if(((ToggleButton) v).isChecked()) {
switchState[index] = true;
((ToggleButton) v).setBackgroundResource(android.R.drawable.btn_star_big_on);
}
else {
((ToggleButton) v).setBackgroundResource(android.R.drawable.btn_star_big_off);
switchState[index] =false;
}
}
});
if(switchState[position])
holder.switchButton.setBackgroundResource(android.R.drawable.btn_star_big_on);
else
holder.switchButton.setBackgroundResource(android.R.drawable.btn_star_big_off);
//holder.categoryName.setText(categories[position]);
holder.switchButton.setTag(Integer.valueOf(position));
ViewHolder.class
public class ViewHolder {
ToggleButton switchButton=null;
ViewHolder(View base) {
this.switchButton=(ToggleButton)base.findViewById(R.id.favorite_button);
}
}
Этот код компилируется.