簡體   English   中英

Android:使用findViewById(ID)時的靜態引用/非靜態方法

[英]Android: static reference / non-static method when using findViewById(ID)

首先,讓我承認我來自Erlang的背景,並且是Android和Java編程的新手……說實話,面向對象讓我頭疼。 :)

我在使用粘稠的舊栗子時遇到了一些麻煩:“無法靜態引用非靜態方法”。 基本上,我正在編寫一個從我們的服務器接收XML並使用它來創建要由用戶填寫的表單的應用程序。 我已經成功地解析了XML並創建(並顯示)了表單。 我使用(非常)簡單的算法為每個EditText字段分配了自己的ID,稍后可以重新創建。

我正忙於“提交”按鈕,它使用用戶輸入的詳細信息將HTTP發布回我們的服務器。 當我嘗試檢索用戶已輸入到表單中的值時,出現了我的問題。 我想做的是遍歷我的ID,使用EditText.findViewById(ID)打開每個EditText實例,並使用getText()檢索其文本。 但是,當我這樣做時,我收到錯誤消息“無法對非靜態方法進行靜態引用”。

現在,我已經完成了一些閱讀,並且我了解的方式是,這是因為我正在嘗試以靜態方式訪問一個非靜態方法,並且為了使其成為靜態,我需要調用實例的方法而不是總的來說是類...問題是我正在按順序調用它以獲取該特定實例,但我不知道該怎么做。

如果有人為我提供幫助,建議或進一步閱讀,我將不勝感激。

干杯,貝文

ps這是我的代碼的相關部分

private static LinearLayout renderForm(...) 
{
    //Build Fields
    ...
    //Build Buttons
    ...
    Button BT = new Button(App);
    BT.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) 
        {
            ...
            for(int j = 0; j < FFListLength;  j++)
            {
                EditText BinField = (EditText) EditText.findViewById(20000+j);
                ...
            }
            ...
        }
    }
}

更新:閱讀JB Nizet的答案后,我意識到自己做錯了。 我已經更改了這一行:EditText BinField =(EditText)EditText.findViewById(20000 + j); 到:EditText binField =(EditText)lContent.findViewById(20000 + j);

其中lContent是我視圖的內容。

感謝您的協助。 貝凡

我不會在Android特定問題上發表評論。 僅針對一般編譯錯誤。 讓我們舉個例子:

public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

為了能夠調用getName()方法,您需要一個User實例:

User john = new User("John");
String johnsName = john.getName();

您正在執行的操作是在沒有任何User實例的情況下調用getName()方法:

String someName = User.getName();

這沒有道理。 您沒有任何用戶。 僅User類。

如我的評論所述; 變量應以小寫字母開頭。 類以大寫字母開頭。 如果您遵守此約定,那么一切都會更加清晰:

john.getName(); // instance method call on object john, of type User.
User.getName(); // static method call on User class.

暫無
暫無

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

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