我有一个OnCLick listener类在我的Android应用程序定义如下。我需要访问一个应用程序级别的变量,但是这段代码的最后一行生成了这个编译错误:"对于OnClickListenerSelectPresetItem类型,getApplication()方法未定义"
如何从这个类访问应用程序变量?
public class OnClickListenerSelectPresetItem implements OnClickListener {
private long glbMealId = ((MyApplication) this.getApplication()).getMealId();
这个错误非常明显。this
是侦听器对象,而不是执行侦听器的上下文。
你应该使用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();
}
...
}
这个操作符在你的例子中引用了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
类的实现。所以:
-
按照@pdegand59的建议将
Activity
传递给OnClickListenerSelectPresetItem
的构造函数 -
使我的应用程序一个单例,方便(这是我做的,因为我不喜欢传递活动):Android应用程序作为单例