3 回答
TA貢獻1848條經驗 獲得超2個贊
是的你可以。
在適配器中添加新字段:
private Context mContext;
在適配器的構造函數中,添加以下代碼:
public AdapterName(......, Context context) {
//your code.
this.mContext = context;
}
在適配器的getView(...)中:
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();
}
}
});
大功告成 如果需要將此適配器用于不需要此調用機制的活動,則代碼將不會執行(如果檢查失?。?/p>
TA貢獻1828條經驗 獲得超3個贊
原版的:
我了解當前答案,但需要一個更清晰的示例。這是我與Adapter(RecyclerView.Adapter)和一起使用的示例Activity。
在您的活動中:
這將實現interface我們在中擁有的Adapter。在此示例中,當用戶單擊中的項目時,將調用它RecyclerView。
public class MyActivity extends Activity implements AdapterCallback {
private MyAdapter myAdapter;
@Override
public void onMethodCallback() {
// do something
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myAdapter = new MyAdapter(this);
}
}
在您的適配器中:
在中Activity,我們啟動了我們的程序Adapter并將其作為參數傳遞給構造方法。這將啟動我們interface的回調方法。您可以看到我們使用回調方法來實現用戶點擊。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private AdapterCallback adapterCallback;
public MyAdapter(Context context) {
try {
adapterCallback = ((AdapterCallback) context);
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement AdapterCallback.", e);
}
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int position) {
// simple example, call interface here
// not complete
viewHolder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
try {
adapterCallback.onMethodCallback();
} catch (ClassCastException e) {
// do something
}
}
});
}
public static interface AdapterCallback {
void onMethodCallback();
}
}
- 3 回答
- 0 關注
- 687 瀏覽
添加回答
舉報
