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();
}
}
});
大功告成 如果需要将此适配器用于不需要此调用机制的活动,则代码将不会执行(如果检查失败)。
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 关注
- 636 浏览
添加回答
举报