[英]Can't access Application variable from OnClickListener class
我的Android應用程序中有一個OnCLick偵聽器類,定義如下。 我需要訪問應用程序級變量,但是此代碼的最后一行會生成此編譯錯誤:“方法OnApplicationListener類型未定義getApplication()。”
如何從此類訪問Application變量?
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();
}
...
}
您的案例中的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
}
}
}
好。 終於明白了您的問題是什么。
您想引用Application
類的實現。 所以:
按照建議將Activity
傳遞給OnClickListenerSelectPresetItem
的構造函數。
為了方便起見,請將MyApplication設為單例(這是我做的,因為我不喜歡傳遞活動): Android Application as Singleton
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.