我有一个适配器类和一个活动,我想从适配器
调用activity方法适配器
holder.fab_plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity)context).getTotalPrice();
}
});
MainActivity
@Override
public void getTotalPrice() {
Toast.makeText(MainActivity.this, "Your Message Has Been Sent", Toast.LENGTH_SHORT).show();
}
我想调用getTotalPrice方法表单适配器
答案 0 :(得分:3)
试试这个:
holder.fab_plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClicked.getTotalPrice("Price");
}
});
适配器类中的接口:
public interface OnClicked {
void getTotalPrice(String price);
}
在适配器类的顶部:
private OnClicked onClicked;
并在适配器的构造函数中初始化它,如:
public MyAdapter(Context context, ...) {
onClicked = (OnClicked) context;
}
现在让您的活动实现如下界面:
public class MyActivity extends Activity implements MyAdapter.OnClicked{
...
@Override
public void getTotalPrice(String price) {
//do whatever you like here
}
}
现在已经完成了!
答案 1 :(得分:0)
您可以直接在适配器类中使用方法。如下所示。
适配器
holder.fab_plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getTotalPrice(context);
}
});
适配器类中的方法意味着相同的类
public void getTotalPrice(Context context) {
Toast.makeText(context, "Your Message Has Been Sent", Toast.LENGTH_SHORT).show();
}
答案 2 :(得分:0)
如果您正在寻找如何编写界面,您可以这样做:)
在适配器中声明接口,
public class YourAdapter extends BaseAdapter {
public interface ClickInformerInterface{
public void getTotalPrice();
}
在YourAdapter中声明一个属性以保存对确认接口的类的引用:)
ClickInformerInterface mInterface;
并在你的onclick监听器中调用它:)
holder.fab_plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mInterface.getTotalPrice();
}
});
在你的主要活动:)创建适配器实例后,将this
设置为适配器的接口:)
YourAdapter youradapter = new YourAdapter(....)
youradapter.mInterface = this;
使用
确认mainActivity中的ClickInformerInterfacepublic class MainActivity extends Activity implements YourAdapter. ClickInformerInterface{
最后在MainActivity中实现方法getTotalPrice():)
public void getTotalPrice() {
Toast.makeText(MainActivity.this, "Your Message Has Been Sent", Toast.LENGTH_SHORT).show();
}
答案 3 :(得分:0)
您不应直接从适配器调用活动方法。有几种方法可以做你想要的。两种最流行的方式是Interface和EventBus。
我建议使用EventBus,因为它更容易实现,并且需要更少的代码。
在您的活动中,创建一个对特定事件做出反应的方法:
@Subscribe
public void onEvent(MyButtonClickEvent e){
//do stuff
}
在适配器中,发送此类事件:
EventBus.getDefault().post(new MyButtonClickEvent());
不要忘记在活动中注册活动:
onStart/onStop: EventBus.getDefault().register(this)/unregister(this);
有关更多信息,请访问EventBus github页面:https://github.com/greenrobot/EventBus
答案 4 :(得分:0)
您可以从适配器发送广播,并可以在主活动中接收广播。