ListView (items - TextView, EditText, CheckBox) + ArrayAdapt
Добавлено: 26 мар 2014, 07:28
Добрый день.
Есть проблема с ListView.
Подробнее:
- есть drugsList = new ArrayList<DataForDrugList>(); В котором DataForDrugList = public String drug = ""; public int count = 0; public Boolean isM = false;
- есть layout для строк в ListView, в этом layout соответственно есть три элемента TextView, EditText, CheckBox;
- есть ArrayAdapter
- ну и соответственно есть такие две строчки в которых к ListView цепляется адаптер:
Логика всего этого дела следующая - есть два режима показа управляемых modeEditable. В одном случае только просмотр, в другом случае можно редактировать поля с количеством и менять состояние чекбоксов.
Просмотр работает нормально, всё отображается правильно, здесь вопросов нет.
Проблема в режиме редактирования, а именно - у меня в списке в среднем порядка 20 записей, на экран они не влазят, список надо прокручивать чтобы добрать до нижних записей. Проблема возникает тогда, когда осуществляется прокрутка списка - если в первой строке отметить чекбокс и прокрутить список до самого низа, а потом прокрутить вверх, то отмеченная галка оказывается скинутой. Если отметить чекбоксы в нескольких различных верхних строках и прокрутить список, то в нижней и средней части появятся отмеченными случайные строки, верхние частично скинутся, частично останутся.
Может кто нибудь дать ссылку на туториал или подсказать в чём проблема?
Есть проблема с ListView.
Подробнее:
- есть drugsList = new ArrayList<DataForDrugList>(); В котором DataForDrugList = public String drug = ""; public int count = 0; public Boolean isM = false;
- есть layout для строк в ListView, в этом layout соответственно есть три элемента TextView, EditText, CheckBox;
- есть ArrayAdapter
Код: Выделить всё
private class MyArrayAdapter extends ArrayAdapter<DataForDrugList> {
private class VHolder {
private TextView drug;
private EditText count;
private CheckBox isM;
}
public MyArrayAdapter(List<DataForDrugList> list) {
super(mContext, R.layout.lv_item, R.id.drugNameTV, list);
}
public View getView(final int position, final View convertView, final ViewGroup parent) {
final View v = super.getView(position, convertView, parent);
if (v != convertView && v != null) {
final VHolder holder = new VHolder();
holder.drug = (TextView) v.findViewById(R.id.drugNameTV);
holder.count = (EditText) v.findViewById(R.id.drugCountET);
holder.count.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if (!s.toString().isEmpty() && !s.toString().equals("0")) {
drugsList.get(position).count = Integer.parseInt(s.toString());
getItem(position).count = Integer.parseInt(s.toString());
}
}
@Override
public void beforeTextChanged(CharSequence s,
int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
});
holder.isMerchant = (CheckBox) v.findViewById(R.id.drugBooleanCB);
holder.isMerchant.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
drugsList.get(position).isMerchant = isChecked;
getItem(position).isMerchant = isChecked;
}
});
v.setTag(holder);
}
VHolder holder = (VHolder) v.getTag();
String _name = getItem(position).drug;
int _count = getItem(position).count;
Boolean _isM = getItem(position).isM;
holder.drug.setText(_name);
holder.count.setText(String.valueOf(_count));
if (_isM)
holder.isM.setChecked(true);
else
holder.isM.setChecked(false);
if (modeEditable) {
holder.count.setEnabled(true);
holder.isMerchant.setClickable(true);
} else {
holder.count.setEnabled(false);
holder.isMerchant.setClickable(false);
}
return v;
}
}
Код: Выделить всё
MyArrayAdapter adapter = new MyArrayAdapter(drugsList);
drugsLV.setAdapter(adapter);
Просмотр работает нормально, всё отображается правильно, здесь вопросов нет.
Проблема в режиме редактирования, а именно - у меня в списке в среднем порядка 20 записей, на экран они не влазят, список надо прокручивать чтобы добрать до нижних записей. Проблема возникает тогда, когда осуществляется прокрутка списка - если в первой строке отметить чекбокс и прокрутить список до самого низа, а потом прокрутить вверх, то отмеченная галка оказывается скинутой. Если отметить чекбоксы в нескольких различных верхних строках и прокрутить список, то в нижней и средней части появятся отмеченными случайные строки, верхние частично скинутся, частично останутся.
Может кто нибудь дать ссылку на туториал или подсказать в чём проблема?