по здешней подсказке реализовал обработку трёх кнопок внутри элемента списка с помощью Callback
в адаптер добавил
private Callbacks callbacks;
public interface Callbacks {
void onAppAccept(int position);
void onAppEdit(int position);
void onAppDelete(int position);
}
public void setCallbacks(Callbacks callbacks) {
this.callbacks = callbacks;
}
там же в адаптере обработчик кнопки вызывает один из методов
holder.appEdit = (Button) convertView.findViewById(R.id.appEdit);
holder.appEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callbacks.onAppEdit(position);
}
});
Во фрагменте перед назначением адаптера
oneAppAdminAdapter = new OneAppAdminAdapter(AllAppsAdminFragment.this, allAppsList);
oneAppAdminAdapter.setCallbacks(new OneAppAdminAdapter.Callbacks() {
@Override
public void onAppAccept(int position) {
//вызов асинтаска принятия
}
@Override
public void onAppEdit(int position) {
//вызов фрагмента редактирования
}
@Override
public void onAppDelete(int position) {
//вызов асинтаска удаления
}
});
setListAdapter(oneAppAdminAdapter);
извлекаю данные из списка во фрагменте так
OneAppClass op = (OneAppClass) allAppsList.get(position);
Но решение оказалось с подвохом. Во-первых у 8-го элемента списка параметр position может оказаться равным например 1. Во-вторых при разной скорости пролистывания значение position у одного и того же элемента может быть разным. Например если пролистывать медленно, то последний элемент списка получает position=1, а если пролистать быстро, то position=2. Я так понимаю это зависит от того какой уже существующий элемент списка будет повторно использоваться для новопоказавшегося. В конечном итоге при обработке нажатия на кнопку из arraylist извлекаются данные не того элемента который нужен. Подскажите как исправить это решение, или как совсем переписать обработку кнопок, чтобы извлекались верные данные. Проблема не была заметна, пока все элементы списка влезали на экран без прокрутки.