ใช่คุณสามารถ.
ในอะแด็ปเตอร์เพิ่มฟิลด์ใหม่:
private Context mContext;
ในตัวสร้างอะแด็ปเตอร์เพิ่มรหัสต่อไปนี้:
public AdapterName(......, Context context) {
//your code.
this.mContext = context;
}
ใน getView (... ) ของ Adapter:
Button btn = (Button) convertView.findViewById(yourButtonId);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof YourActivityName) {
((YourActivityName)mContext).yourDesiredMethod();
}
}
});
แทนที่ด้วยชื่อชั้นเรียนของคุณเองที่คุณเห็นรหัสกิจกรรมของคุณ ฯลฯ
หากคุณจำเป็นต้องใช้อะแดปเตอร์เดียวกันนี้มากกว่าหนึ่งกิจกรรมให้ทำดังนี้
สร้างอินเทอร์เฟซ
public interface IMethodCaller {
void yourDesiredMethod();
}
ใช้อินเทอร์เฟซนี้ในกิจกรรมที่คุณต้องการเพื่อให้มีฟังก์ชันการเรียกใช้เมธอดนี้
จากนั้นใน Adapter getView () ให้เรียกเช่น:
Button btn = (Button) convertView.findViewById(yourButtonId);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof IMethodCaller) {
((IMethodCaller) mContext).yourDesiredMethod();
}
}
});
คุณทำเสร็จแล้ว หากคุณจำเป็นต้องใช้อะแด็ปเตอร์นี้สำหรับกิจกรรมที่ไม่ต้องการกลไกการโทรนี้โค้ดจะไม่ทำงาน (หากการตรวจสอบล้มเหลว)