我的Android应用程序中有一个OnCLick监听器类,定义如下。我需要访问应用程序级变量,但此代码中的最后一行生成此编译错误: “对于OnClickListenerSelectPresetItem类型,方法getApplication()未定义”
如何从此类访问应用程序变量?
public class OnClickListenerSelectPresetItem implements OnClickListener {
private long glbMealId = ((MyApplication) this.getApplication()).getMealId();
答案 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
课程的实施。
所以:
将Activity
传递给OnClickListenerSelectPresetItem
的构造函数,作为@ pdegand59建议。
为方便起见,将MyApplication设为单身人士(这是我的工作,因为我不喜欢传递活动):Android Application as Singleton