簡體   English   中英

無法從OnClickListener類訪問Application變量

[英]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類的實現。 所以:

  1. 按照建議將Activity傳遞給OnClickListenerSelectPresetItem的構造函數。

  2. 為了方便起見,請將MyApplication設為單例(這是我做的,因為我不喜歡傳遞活動): Android Application as Singleton

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM