2011-02-07 14 views
0

ボタンのonClickListener実装内のonClick()メソッドからEditTextにアクセスしようとしています。コードは次のとおりです。onClick()内部クラスからのプログラムデータへのアクセス

transmit.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     //data validation 
     /////////////////////// 
     boolean valid = true; 
     if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") { 
      TX_FAIL_TEXT = "Missing Driver ID!"; 
      showDialog(DIALOG_FAIL); 
      TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
      valid = false; 
     } 
     Log.e("smsDRVERR",((EditText)findViewById(R.id.drv_in)).getText().toString()); 
     //begin transmission 
     /////////////////////// 
     if(valid) { 
      showDialog(DIALOG_TX_PROGRESS); 
      Thread t = new Thread(txRunnable); 
      t.start(); 
     } else { 
      //do things if needed 

     } 
    } 
}); 

Log.eは決して呼び出されません(logcatには表示されません)。あたかも条件文が存在しないかのようにプログラムが実行されます。 onClick実装でどのようにレイアウト項目を適切に参照するのですか?

Log.e("smsDRVERR",((EditText)smsActivity.this.findViewById(R.id.drv_in)).getText().toString()); 

私はSOに見つかったこの質問にに言及した:

Inside OnClickListener I cannot access a lot of things - how to approach?

が、それは問題を解決していません私はまた、次の行を試してみました。私はこの内部クラスの中でこれらの項目を参照する必要がある何かが不足している、または多分私の構文を少しジャングルしている。どんな助けもありがとう。

+0

あなたのログ文は、条件付きの外にあるが、コードに関して無条件にログを記録する必要があります。あなたのロギングに何かが間違っているか、それをどのように見ていますか?簡単なLog.e( "a"、 "b")を試してみてください。メソッドの最初の段階で。いったん動作したら、何が間違っているのかを診断することができます。 –

+0

ログステートメントは問題ではなく、異なるデータで動作します。これは私がこのような応答を回避することができることを確認するために投稿する前に使用したテストでした... – moonlightcheese

+0

上記の "Log.eが呼び出されていない"を書き込みます。今度は、「ログステートメントは問題ありません」と言います。正確な情報を提供し、問題を再現するためにコードを最小限に抑えてください。 –

答えて

2

Stringは正しく比較されていません。 オブジェクトが等しい場合は、が等しいかどうかを確認したいのに対し、

if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") { 

は、チェックしています。私はむしろ getText複数回呼び出すよりも、 String変数に getTextによって返された値を代入したい、個人的に

​​

:あなたは使用する必要があります

String myEditTextValue = (EditText)findViewById(R.id.drv_in)).getText().toString(); 
... 
if ("".equals(myEditTextValue)) { 
2

まず、あなたのonClickメソッドが呼び出されていますか?次に、文字列の比較には==を使用しないでください。 .equals()を使用してください。 (同じ文字列が同じオブジェクトである必要はありません。==がテストします)

+0

これは確かに実際の問題でした。 Log.e()呼び出しが機能していなかったのは、関数がNULL値を渡していたためです。レスポンスありがとう。 – moonlightcheese

関連する問題