无法从 OnClickListener 类访问应用程序变量



我有一个OnCLick listener类在我的Android应用程序定义如下。我需要访问一个应用程序级别的变量,但是这段代码的最后一行生成了这个编译错误:"对于OnClickListenerSelectPresetItem类型,getApplication()方法未定义"

如何从这个类访问应用程序变量?

public class OnClickListenerSelectPresetItem implements OnClickListener {
    private long glbMealId = ((MyApplication) this.getApplication()).getMealId();

这个错误非常明显。this是侦听器对象,而不是执行侦听器的上下文。

你应该使用ActivityExecutingListener.this.getApplication()

编辑:如果你的监听器不是一个匿名/内部类,你需要在监听器实例中存储Context:
public class OnClickListenerSelectPresetItem implements OnClickListener {
  private long glbMealId;
  private Activity activity;
  public OnClickListenerSelectPresetItem(Activity activity) {
    this.activity = activity; // facultative, but you may need it in onClick() ...
    this.glbMealId = ((MyApplication) activity.getApplication()).getMealId();
  }
  ...
}

这个操作符在你的例子中引用了OnClickListenerSelectPresetItem

下面是你要做的一个例子,从我的一个项目中剪切过来:

public class PageFragment extends Fragment {
    private boolean isVisible( View view )
    {
        return true; // fake 
    }
    private class OnLikeClickListener implements OnClickListener
    {
        private boolean isVisible = PageFragment.this.isVisible(); // <------
        @Override
        public void onClick(View v) 
        {
            // Do whatever
        }
    }
}

OK。我终于明白你的问题是关于什么的了。

你想引用你的Application类的实现。所以:

  1. 按照@pdegand59的建议将Activity传递给OnClickListenerSelectPresetItem的构造函数

  2. 使我的应用程序一个单例,方便(这是我做的,因为我不喜欢传递活动):Android应用程序作为单例

相关内容

最新更新