2016-10-03 33 views
1

我是Android編程和學習構建移動應用程序的新手。使用Android Studio並遇到此問題。 我有一個HashMap,其中包含EditText作爲值。但是,當我.get(),然後嘗試.setEnabled()EditText它引發異常/錯誤。HashMap和EditText.setEnabled()

如果我將EditText設置爲一個變量,然後.setEnabled()它工作正常。有什麼不同?

CODE:

public static HashMap<String,EditText> GUESTS = new HashMap<String,EditText)(); 

GUESTS.put("CRAFT", ((EditText) view.findViewById(R.id.crafteGuest)); 

EditText craftGuest = (EditText) findViewById(R.id.craftGuest); 
craftGuest.setEnabled("true"); // this works 

GUESTS.get("CRAFT").setEnabled("true"); // this does NOT work 

有什麼想法?

public void onClick(View view) { 
    switch(view.getTag().toString()) { 
     case "CRAFT" : { 
      if (!GUESTS.containsKey("CRAFT")) { 
       GUESTS.put("CRAFT", ((EditText) view.findViewById(R.id.craftGuest))); 
      } 
      GUESTS.get("CRAFT").setEnabled("true"); 
     } 
    } 
} 
+2

也許這裏代碼不夠。爲什麼GUESTS使用「view.findViewById」而另一個(工作)只使用「(隱含這個)。findViewById」?他們真的都得到同一個對象嗎?我的猜測並不是,而且你對客人置之不理。 – user1676075

+0

我有幾個按鈕和編輯文本對,當你點擊按鈕,我想獲得配對editText句柄。然而,使用findViewById(...)需要編輯文本對象(在本例中爲R.Id.craftGuest)的「id」我希望能夠在數組中設置EditText對象,然後稍後使用該數組可以訪問配對的editText。 (如果有更好的方法來做到這一點,請讓我知道)。 –

+1

*什麼是異常/錯誤?我不認爲你瞭解這個評論。 'view.findViewById(id)'和'findViewById(id)'是有區別的。您已經說過第二個作品,這意味着這裏的「視圖」不一樣 –

回答

0

更換

GUESTS.get("CRAFT").setEnabled("true"); 

通過

((EditText)GUESTS.get("CRAFT")).setEnabled(true); 
0

如果這個工程:

EditText craftGuest = (EditText) findViewById(R.id.craftGuest); 
craftGuest.setEnabled("true"); 

你爲什麼不這樣做:

EditText craftGuest = (EditText) findViewById(R.id.craftGuest); 
GUESTS.put("CRAFT", craftGuest); 
GUESTS.get("CRAFT").setEnabled("true"); 

或者簡化:

GUESTS.put("CRAFT", (EditText) findViewById(R.id.craftGuest)); 
GUESTS.get("CRAFT").setEnabled("true"); 

我認爲,在這裏你的問題是視圖。之前findBiewById

還有一個注意事項:.setEnabled方法正在等待一個布爾值。在你的情況下你有一個字符串值(「真」)。正確的代碼是:

public HashMap<String,EditText> GUESTS = new HashMap<String,EditText)(); 

GUESTS.put("CRAFT", (EditText) findViewById(R.id.craftGuest)); 
GUESTS.get("CRAFT").setEnabled(true); // true without quotation marks 
+0

謝謝。讓我嘗試一下,我會讓你知道。 (有時幫助其他人的眼睛。 –