2015-09-08 3 views
0

Я борюсь с 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 и удерживать его во время прокрутки списка?

ответ

2

Ваши зеленые виды перерабатываются. положите другое условие после вашего блока if

if(!mItemsChecked.contains(position)){ 
     System.out.println("POSITION GREEN : " + Integer.toString(position)); 
     holder.mainButton1.setVisibility(View.INVISIBLE); 
     holder.mainButton2.setVisibility(View.VISIBLE); 
    } 
else{ 
    System.out.println("POSITION Blue : " + Integer.toString(position)); 
     holder.mainButton1.setVisibility(View.VISIBLE); 
     holder.mainButton2.setVisibility(View.INVISIBLE); 
} 
+0

Я знал, что я был почти там. Спасибо) – JohnK

+0

Действительно, вы были почти там :) – harshitpthk

 Смежные вопросы

  • Нет связанных вопросов^_^