Я борюсь с ListViewAdapter и с OnClickListener в нем. Задача проста:Android ListViewAdapter не работает должным образом
- каждая строка в списке имеет синюю кнопку;
- кнопка должна изменить цвет на зеленый после щелчка по нему;
- зеленый цвет должен оставаться на нажатой кнопке независимо от того, как вы прокручиваете список.
код адаптера:
public class ListViewAdapter extends ArrayAdapter<StuffPics> {
Context context;
public ArrayList<Integer> mItemsChecked;
public ListViewAdapter(Context context, int resource, ArrayList<StuffPics> mylist) {
super(context, resource, mylist);
this.context = context;
mItemsChecked = new ArrayList<Integer>();
}
@Override
public View getView(final int position, View cell, ViewGroup parent) {
final Holder holder;
View v= cell;
if (v == null){
holder = new Holder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.seepic_test, null);
holder.mainButton1 = (Button)v.findViewById(R.id.main_button1);
holder.mainButton2 = (Button)v.findViewById(R.id.main_button2);
if(mItemsChecked.size()==0 || (!mItemsChecked.contains(position) && position > mItemsChecked.get(mItemsChecked.size() - 1))){
mItemsChecked.add(position);
}
v.setTag(holder);
}else{
if(mItemsChecked.size()==0 || (!mItemsChecked.contains(position) && position > mItemsChecked.get(mItemsChecked.size() - 1))){
mItemsChecked.add(position);
}
holder = (Holder)v.getTag();
if(!mItemsChecked.contains(position)){
System.out.println("POSITION GREEN : " + Integer.toString(position));
holder.mainButton1.setVisibility(View.INVISIBLE);
holder.mainButton2.setVisibility(View.VISIBLE);
}
}
holder.mainButton1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mItemsChecked.remove(position);
holder.mainButton1.setVisibility(View.INVISIBLE);
holder.mainButton2.setVisibility(View.VISIBLE);
}
});
return v;
}
Моя идея заключается в том, чтобы собрать все позиции в mItemsChecked массиве, а затем по нажатию кнопки удалить определенную позицию из этого массива, а затем на повторное использование в целях дозировать его в соответствии с текущее состояние массива mItemsChecked - если позиция все еще существует, тогда синяя кнопка, если позиция не находится в массиве (кнопка была нажата и позиция была удалена), затем зеленая кнопка.
Теперь, согласно журналам, это работает. Но не в соответствии с реальной точки зрения)
Журналы:
- mItemsChecked массив собран должным образом;
- определенное положение удаляется при правильном нажатии;
- System.out.println («POSITION GREEN») показывает правильное положение, при котором зеленая кнопка должна находиться в режиме прокрутки.
Реальный вид:
- по нажатию одной кнопки две кнопки зеленеют. Если я нажму кнопку №2, а затем прокрутите страницу ниже, я также увижу кнопку num.12 Green. Если кнопка № 4, то 14-й ... если 17-й, затем 7-й и т. Д. Через десять;
- , когда я прокручиваю список назад и вперед, другие кнопки случайным образом становятся зелеными.
И я застрял здесь, потому что журналы не соответствуют реальному виду. Что я делаю неправильно? Как включить другой цвет на нажатой кнопке в ListView и удерживать его во время прокрутки списка?
Я знал, что я был почти там. Спасибо) – JohnK
Действительно, вы были почти там :) – harshitpthk