无法从OnClickListener类访问Application变量

时间:2014-05-27 14:39:22

标签: java android variables

我的Android应用程序中有一个OnCLick监听器类,定义如下。我需要访问应用程序级变量,但此代码中的最后一行生成此编译错误: “对于OnClickListenerSelectPresetItem类型,方法getApplication()未定义”

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

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

3 个答案:

答案 0 :(得分:3)

错误很明确。 this是侦听器对象,而不是执行侦听器的Context。

您应该使用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();
  }

  ...
}

答案 1 :(得分:0)

在您的案例中,此运算符引用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

        }

    }
}

答案 2 :(得分:0)

行。最后明白你的问题是什么。

您想参考Application课程的实施。 所以:

  1. Activity传递给OnClickListenerSelectPresetItem的构造函数,作为@ pdegand59建议。

  2. 为方便起见,将MyApplication设为单身人士(这是我的工作,因为我不喜欢传递活动):Android Application as Singleton