Tak, możesz.
W adapterze Dodaj nowe pole:
private Context mContext;
W konstruktorze adaptera dodaj następujący kod:
public AdapterName(......, Context context) {
//your code.
this.mContext = context;
}
W getView (...) adaptera:
Button btn = (Button) convertView.findViewById(yourButtonId);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof YourActivityName) {
((YourActivityName)mContext).yourDesiredMethod();
}
}
});
zastąp własnymi nazwami klas, w których widzisz swój kod, aktywność itp.
Jeśli potrzebujesz użyć tego samego adaptera do więcej niż jednej czynności, to:
Utwórz interfejs
public interface IMethodCaller {
void yourDesiredMethod();
}
Zaimplementuj ten interfejs w działaniach, których potrzebujesz, aby mieć tę funkcję wywoływania metody.
Następnie w adapterze getView () wywołaj:
Button btn = (Button) convertView.findViewById(yourButtonId);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof IMethodCaller) {
((IMethodCaller) mContext).yourDesiredMethod();
}
}
});
Skończyłeś. Jeśli potrzebujesz użyć tego adaptera do działań, które nie wymagają tego mechanizmu wywołującego, kod nie zostanie wykonany (jeśli sprawdzenie nie powiedzie się).