Answer the question
In order to leave comments, you need to log in
How to fix button processing?
according to the local hint, I implemented the processing of three buttons inside the list element using 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);
Answer the question
In order to leave comments, you need to log in
Всё оказалось элементарно. Надо было просто в каждом обработчике кнопки перед вызовом callback извлечь нужный элемент из arraylist. И передавать в колбеке не position а сам oneAppClass
oneAppClass = (OneAppClass) getItem(position);
callbacks.onAppEdit(oneAppClass);
Соответственно
public interface Callbacks {
void onAppAccept(OneAppClass oneAppClass);
void onAppEdit(OneAppClass oneAppClass);
void onAppDelete(OneAppClass oneAppClass);
}
А иначе им оставался последний загруженный элемент списка, что логично не соответствовало нажатой кнопке.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question