簡體   English   中英

如何從靜態上下文中引用非靜態方法'findViewById'?

[英]How to reference non-static method 'findViewById' from a static context?

我剛剛開始進行android開發,現在我被困在這里:

static Handler h = new Handler()
{
    @Override
    public void handleMessage(Message msg) {
        TextView buttonmain = (TextView)findViewById(R.id.buttonmainid);
        if(buttonmain.getText()=="Text1")
            buttonmain.setText("Text2");
        else
            buttonmain.setText("Text1");
    }
};

這給出了有關在靜態上下文中訪問findViewById()方法的錯誤。

我認為在這種情況下,您不應該將處理程序設為靜態。 確實,非靜態處理程序的確會導致內存泄漏,但並非總是如此。 如果您剛剛開始Android開發,則可能不會遇到導致內存泄漏的情況。

當您將消息發送到處理程序時,在銷毀該類之前未對其進行處理的問題通常會出現此問題。 換句話說,要發生內存泄漏,必須發生以下情況:

  1. 創建實例
  2. 創建處理程序
  3. 發送消息給處理程序
  4. 消滅階級
  5. 處理程序處理消息。

在這種情況下,會發生內存泄漏。 但是我非常懷疑這會發生。

但是,要回答您的問題,一種簡單的方法是在您的班級中添加以下內容:

static MyClass instance;

並在構造函數中:

MyClass.instance = this;

但是請務必小心,當您獲得同一類的多個實例時,這將永遠無法正常工作,因此您可能需要研究單例。

您需要在要獲取View的位置使用帶有contentView的Activity實例。

但是...看您的代碼,我認為您應該直接傳遞TextView實例。

希望這可以幫助。

暫無
暫無

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

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