У меня есть таможня ListView
, содержащая TextView
, ImageView
, Checkbox
. В ListView
ничего не должно быть проверено/снято, поскольку я должен заблокировать его на основе условий.Как сохранить позицию строки/элемента списка?
Задачи, которые я делаю:
Если
Checkbox
установлен, то он должен показывать изображение вImageView
.Я не хочу делать
CheckBox
проверять/включать на основе условий.
Ниже приведен мой код для пользовательского адаптера.
public class CustomAdapter extends BaseAdapter {
private Context context;
private ArrayList<POJO> mainDataList;
private LayoutInflater inflater = null;
public CustomAdapter(Context context, ArrayList<POJO> mainDataList) {
this.context = context;
this.mainDataList = mainDataList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mainDataList.size();
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public POJO getItem(int position) {
// TODO Auto-generated method stub
return mainDataList.get(position);
}
public class Holder
{
private TextView name;
private ImageView imageView;
private CheckBox check;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
final Holder holder;
if (view == null) {
holder = new Holder();
view = inflater.inflate(R.layout.my_layout_file, null);
holder.name = (TextView) view.findViewById(R.id.textView_Name);
holder.imageView = (ImageView) view.findViewById(R.id.img);
holder.check = (CheckBox) view.findViewById(R.id.checkBox);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.check.setTag(position);
if (mainDataList.get(position).isEditable()) {
holder.check.setEnabled(false);
holder.check.setClickable(false);
} else {
holder.check.setEnabled(true);
holder.check.setClickable(true);
}
}
holder.name.setText(mainDataList.get(position).getName());
holder.check.setChecked(mainDataList.get(position).isSelected());
if (mainDataList.get(position).isSelected())
holder.imageView.setImageResource(R.drawable.ic_launcher);
else
holder.imageView.setImageResource(null);
return view;
}
}
Мои проблемы:
На свитке,
ImageView
показывает изображения в случайном порядке независимо от истинного состояния.В прокрутке после каждого пункта 4-5 элементов/строк элемент становится недоступным (мое устройство показывает 4-5 ячеек/строк/элементов на экране без прокрутки), поскольку элемент 1 не подлежит проверке. Просто он извлекается в соответствии с механизмом getView().
Я знаю, что это проблема сохранения позиции позиции списка или переустановки ListView в прокрутке. Как это сделать?
@sushildlh Уже попробовал SparseBooleanArray. Пожалуйста, поделитесь конструктивными комментариями – VVB
, которые вы вызываете 'setImageResource' условно: вы должны« очистить »его в разделе' else', также избавиться от этого материала держателя: он только испортил код и его преимущества почти равны нулю – pskink
@ pskink Смотрите мои правки – VVB