Не имея возможности протестировать ваш код в данный момент (на моем ноутбуке), я бы сказал, что ваша проблема связана с тем, как вы перерабатываете свой вид.Подумайте о том, как переработка работает в ArrayAdapter#getView()
.Может быть, вам нужно переместить часть кода внутри условия convertView == null
за пределы блока if / else?Чтобы подтвердить, что это проблема, вы можете просто ничего не перерабатывать и просто каждый раз предоставлять новое представление (конечно, это может быть неэффективно, если ваш список может стать очень большим, но это должно подойти для тестирования со списком, достаточно большим, чтобыпридется немного прокрутить).
Надеюсь, что на данный момент это поможет, завтра у нас будет больше взгляда.
Правка: еще раз взглянул на код и, похоже, с ним возникли некоторые проблемы,Какой именно тип вашей модели?Потому что у вас есть List<Class_Model>
(вы должны избегать подчеркивания в именах классов, imho) в вашем конструкторе, но List<String>
в вашей переменной экземпляра list
.Мне трудно сказать, что вы пытаетесь сделать, не зная, какой вам нужен для вашего списка - просто отображать какой-то текст (в этом случае подойдет String
) или это требует более сложного поведения (вв этом случае вам нужен объект модели).
Вот некоторый код, основанный на предположении, что вам нужно определить какой-то ClassModel
, а ваш ArrFDItem
(что бы это ни было) является локальной переменной.Оба предположения могут быть неверными, но я бы посоветовал вам подумать о том, почему я сделал эти предположения ... и сравнить ваш код с кодом ниже, чтобы увидеть, что изменилось.
public class ArrayAdapterDiscountList extends ArrayAdapter<ClassModel> {
protected final List<ClassModel> list;
private final Activity context;
protected List<String> arrFdItems;
public ArrayAdapterDiscountList(Activity context, List<ClassModel> list) {
super(context, R.layout.list, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected ToggleButton toggle;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.list, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.list_item_name);
viewHolder.toggle = (ToggleButton) view.findViewById(R.id.checkbox_toggle);
viewHolder.toggle.setVisibility(View.VISIBLE);
viewHolder.toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ClassModel element = (ClassModel) viewHolder.toggle.getTag();
element.setSelected(buttonView.isChecked());
if (isChecked) {
arrFdItems.add(list.get(position).getName());
} else {
arrFdItems.remove(list.get(position).getName());
}
}
});
view.setTag(viewHolder);
viewHolder.toggle.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).toggle.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.toggle.setChecked(list.get(position).isSelected());
return view;
}
public class ClassModel {
private String name;
private boolean isSelected;
public String getName() {
return name;
}
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean aBoolean) {
isSelected = aBoolean;
}
}
}
Если этоне помогает, вам нужно вернуться к основам, прочитать некоторые учебные пособия и попытаться следовать им шаг за шагом, пока вы не освоите его.Я могу порекомендовать их на сайте vogella.de, например, http://www.vogella.de/articles/AndroidListView/article.html.