Представления макета элемента списка показать скрыть

В элементе списка есть две кнопки button1 и button2.
При нажатии кнопки 1 я хочу показать кнопку 2 только этой строки. Это было достигнуто путем установки экземпляра кнопки 2 в качестве тега кнопки 1, а затем onClickListener кнопки 1 получил кнопку 1 с помощью getTag и изменил ее видимость.
Вопрос 1. Существует ли более оптимальный способ сделать это?
Q2: При прокрутке, поскольку я использую шаблон держателя представления и повторно использую строки, кнопка2, отображаемая в другом месте в некоторых строках списка, закрывается.

Кто угодно?


person chaitanyad    schedule 21.07.2014    source источник


Ответы (1)


Вам нужно обработать это в обратном вызове адаптера getView. Что-то типа:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    LayoutInflater vi;
    vi = LayoutInflater.from(getContext());
    v = vi.inflate(R.layout.itemlistrow, null);
    Button button1 = (Button) v.findViewById(R.id.button1);
    Button button2 = (Button) v.findViewById(R.id.button2);
    button1.setOnClickListener(new OnClickListener() {
         public void onClick(View v)
         {
             button2.setVisibility(View.VISIBLE);
         } 
    });


    return v;

}
person SuppressWarnings    schedule 21.07.2014
comment
привет, приведенный выше пример не отвечает на мой второй вопрос Q2: при прокрутке, поскольку я использую шаблон держателя представления и повторно использую строки, кнопка2, которая отображается в другом месте в некоторых строках в списке, закрывается. - person chaitanyad; 22.07.2014
comment
и мне пришлось бы объявить button2 как final, чтобы использовать его в слушателе. Это то, что имелось в виду? - person chaitanyad; 22.07.2014