2016-10-03 1 views
1

私はAndroidプログラミングやモバイルアプリケーションを構築するための学習には初めてです。 Android Studioを使用してこの問題に遭遇しました。 私は値としてEditTextを含むHashMapを持っています。しかし、私が.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"だけを使用しますか?彼らは本当に両方とも同じオブジェクトを取得していますか?私の推測ではなく、あなたがゲストに "null"か何かを入れているということです。 – user1676075

+0

私はボタンをクリックすると、editTextと対になるハンドルを取得したいという、いくつかのボタンとedittextペアを持っています。しかし、findViewById(...)を使うと、edittextオブジェクトの "id"(この場合はR.Id.craftGuest)が必要になります。私は、配列内にEditTextオブジェクトを設定してから、その配列を後で使用できるようにしたいと考えていました対になっているeditTextにアクセスできます。 (これを行うより良い方法があれば、私に知らせてください)。 –

+1

*例外/エラーは何ですか?私はあなたがそのコメントを理解したとは思わない。 'view.findViewById(id)'と 'findViewById(id)'には違いがあります。あなたは2番目の作品を言いました。つまり、ここの「ビュー」は同じではありません。 –

答えて

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の前に。

もう1つの注意:.setEnabledメソッドはブール値を待機しています。あなたの場合、文字列値( "true")があります。正しいコードは次のようになります。

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

ありがとうございます。それを試してみましょう、私はあなたに知らせるでしょう。 (時々他の目で助けます。 –