Ja, du kannst.
Im Adapter Neues Feld hinzufügen:
private Context mContext;
Fügen Sie im Adapterkonstruktor den folgenden Code hinzu:
public AdapterName(......, Context context) {
//your code.
this.mContext = context;
}
In der getView (...) des Adapters:
Button btn = (Button) convertView.findViewById(yourButtonId);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof YourActivityName) {
((YourActivityName)mContext).yourDesiredMethod();
}
}
});
Ersetzen Sie durch Ihre eigenen Klassennamen, in denen Sie Ihren Code, Ihre Aktivität usw. sehen.
Wenn Sie denselben Adapter für mehr als eine Aktivität verwenden müssen, gehen Sie wie folgt vor:
Erstellen Sie eine Schnittstelle
public interface IMethodCaller {
void yourDesiredMethod();
}
Implementieren Sie diese Schnittstelle in Aktivitäten, für die Sie diese Funktion zum Aufrufen von Methoden benötigen.
Rufen Sie dann in Adapter getView () wie folgt auf:
Button btn = (Button) convertView.findViewById(yourButtonId);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof IMethodCaller) {
((IMethodCaller) mContext).yourDesiredMethod();
}
}
});
Du bist fertig. Wenn Sie diesen Adapter für Aktivitäten verwenden müssen, für die dieser Aufrufmechanismus nicht erforderlich ist, wird der Code nicht ausgeführt (wenn die Prüfung fehlschlägt).