Реализация ViewHolder и использование

Я реализовал список (где каждый элемент является кнопкой), и теперь я хочу повысить его эффективность с помощью ViewHolder. Вот моя проблема, я не знаю, где я должен переопределить методы OnClick этих кнопок.

Это getView моего ArrayAdapter:

public View getView(final int position, View convertView, ViewGroup parent) {  
    ViewHolder view;  
    if(convertView==null)  
    {  
        view = new ViewHolder();  
        LayoutInflater inflator = activity.getLayoutInflater();  
        convertView = inflator.inflate(R.layout.layout_opcion, null);  
        view.b_opcion = (Button) convertView.findViewById(R.id.boton_opcion);
        **view.b_opcion.setOnClickListener(new View.OnClickListener() {...});**
        convertView.setTag(view);  
    }  
    else  
    {  
        view = (ViewHolder) convertView.getTag();  
    }
    **view.b_opcion.setOnClickListener(new View.OnClickListener() {...});**
    view.b_opcion.setText(getItem(position));  
    return convertView;  
}  

}

Этот метод OnClick должен отображать некоторую информацию о выбранном элементе, поэтому вот мой вопрос. Могу ли я переопределить этот метод внутри

если (convertView == null) {ЗДЕСЬ}

(чтобы сделать это только один раз)? Или наоборот, внутри этого ЕСЛИ должны быть только строки кода, которые относятся к раздуванию макетов?


person dnaranjo    schedule 23.04.2012    source источник


Ответы (2)


Я бы поместил параметр в держатель представления, который определяет некоторую идентификацию строки (например, идентификатор или позицию)

установите эту информацию вне используемых вами if (непосредственно перед или после view.b_opcion.setText(...

Я бы определил класс прослушивателя, который реализует OnClickListener, и прикрепил бы один и тот же экземпляр ко всем представлениям внутри первого оператора if.

В onlick listener вы можете вызвать getTag для просмотра, преобразовать объект в viewholder, а затем получить свой идентификатор/позицию от viewholder. После этого вы можете добраться до объекта и делать с имеющимися у вас данными все, что захотите: представление, элемент адаптера и т. д.

person Siyamed    schedule 24.04.2012

Вы хотите это сделать после оператора if. Внутри оператора if вы получите только ссылку на элементы пользовательского интерфейса представления. После оператора if вы можете вносить изменения, устанавливать прослушиватели и т. д.

person David Scott    schedule 23.04.2012