Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t从OnClickListener类访问应用程序变量_Java_Android_Variables - Fatal编程技术网

Java Can';t从OnClickListener类访问应用程序变量

Java Can';t从OnClickListener类访问应用程序变量,java,android,variables,Java,Android,Variables,我的Android应用程序中有一个OnCLick listener类,定义如下。我需要访问应用程序级变量,但此代码的最后一行生成以下编译错误: “OnClickListenerSelectPresetItem类型的方法getApplication()未定义” 如何从这个类访问应用程序变量 public class OnClickListenerSelectPresetItem implements OnClickListener { private long glbMealId = ((

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

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

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

这个错误非常明显<代码>这是侦听器对象,而不是执行侦听器的上下文

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

编辑:如果您的侦听器不是匿名/内部类,则需要在侦听器实例中存储上下文:

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();
  }

  ...
}

这个错误非常明显<代码>这是侦听器对象,而不是执行侦听器的上下文

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

编辑:如果您的侦听器不是匿名/内部类,则需要在侦听器实例中存储上下文:

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();
  }

  ...
}

这个错误非常明显<代码>这是侦听器对象,而不是执行侦听器的上下文

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

编辑:如果您的侦听器不是匿名/内部类,则需要在侦听器实例中存储上下文:

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();
  }

  ...
}

这个错误非常明显<代码>这是侦听器对象,而不是执行侦听器的上下文

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

编辑:如果您的侦听器不是匿名/内部类,则需要在侦听器实例中存储上下文:

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();
  }

  ...
}

本例中的this运算符引用了单击ListenerSelectPresetItem时的
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

        }

    }
}
public类PageFragment扩展了片段{
私有布尔值可见(视图)
{
返回true;//假
}
私有类OnLikeClickListener实现OnClickListener
{

private boolean isVisible=PageFragment.this.isVisible();//本例中的this运算符引用了
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

        }

    }
}
public类PageFragment扩展了片段{
私有布尔值可见(视图)
{
返回true;//假
}
私有类OnLikeClickListener实现OnClickListener
{

private boolean isVisible=PageFragment.this.isVisible();//本例中的this运算符引用了
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

        }

    }
}
public类PageFragment扩展了片段{
私有布尔值可见(视图)
{
返回true;//假
}
私有类OnLikeClickListener实现OnClickListener
{

private boolean isVisible=PageFragment.this.isVisible();//本例中的this运算符引用了
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

        }

    }
}
public类PageFragment扩展了片段{
私有布尔值可见(视图)
{
返回true;//假
}
私有类OnLikeClickListener实现OnClickListener
{

private boolean isVisible=PageFragment.this.isVisible();//好的。终于明白你的问题是什么了

您想引用
应用程序的实现。
因此,要么:

  • 活动
    传递给@pdegand建议的
    OnClickListenerSelectPresetItem
    的构造函数

  • 为方便起见,将我的应用程序设置为单例(我这样做是因为我不喜欢传递活动):


  • 好的,我终于明白你的问题是什么了

    您想引用
    应用程序的实现。
    因此,要么:

  • 活动
    传递给@pdegand建议的
    OnClickListenerSelectPresetItem
    的构造函数

  • 为方便起见,将我的应用程序设置为单例(我这样做是因为我不喜欢传递活动):


  • 好的,我终于明白你的问题是什么了

    您想引用
    应用程序的实现。
    因此,要么:

  • 活动
    传递给@pdegand建议的
    OnClickListenerSelectPresetItem
    的构造函数

  • 为方便起见,将我的应用程序设置为单例(我这样做是因为我不喜欢传递活动):


  • 好的,我终于明白你的问题是什么了

    您想引用
    应用程序的实现。
    因此,要么:

  • 活动
    传递给@pdegand建议的
    OnClickListenerSelectPresetItem
    的构造函数

  • 为方便起见,将我的应用程序设置为单例(我这样做是因为我不喜欢传递活动):



  • 您可以提供更多的代码吗?请尝试使用classname.this或put getContext()可以提供更多的代码吗?请尝试使用classname.this或put getContext()可以提供更多的代码吗?请尝试使用classname.this或put getContext()可以提供更多的代码吗?请尝试使用classname.this或put getContext()可以我刚刚尝试了您的确切代码,但最后一行给出了“类型上下文的方法getApplication()未定义”编辑:getApplication()只能从活动中使用,不能从上下文中使用。因此,如何从此类访问我的应用程序变量??(因为它不是活动类)只需使用
    new OnClickListenerSelectPresetItem(this)
    将活动传递给侦听器,并将
    this
    作为一个动作