为什么我不能从适配器调用方法?

时间:2016-05-03 07:11:22

标签: android

我有一个适配器类和一个活动,我想从适配器

调用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方法表单适配器

5 个答案:

答案 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中的ClickInformerInterface
public 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)

您可以从适配器发送广播,并可以在主活动中接收广播。