2016-10-20 29 views
0

私はJavaプログラミングの完全な午後であり、いつものように(私はそのように良い結果を得るようです)深いところで自分を投げ込んでいます。メソッドsetText()を解決できません - Androidスタジオの開発

AndroidスタジオでAndroidアプリを作成していて、Javaコードでエラーが発生しました。

私は答えを探しましたが、答えはすべて実際のコードに非常に固有なので、私自身は答えを見つけることができません。

私のMainActivity.javaでは、TextWatcherをNumberTextWatcherとして使用しています。これは、変換を行い、10進数の通貨(ユーザーが価格を入力するため)を入力すると、Stack Overflowでthis answerになります。

問題は、私はエラーを取得していますということです。ここで

Cannot resolve method setText()

は、エラーがされているコードです(私は// <でエラーをマークしている - ここでは、エラーがスローされます。):

public class NumberTextWatcher implements TextWatcher { 

    private final DecimalFormat df; 
    private final DecimalFormat dfnd; 
    private final EditText et; 
    private boolean hasFractionalPart; 
    private int trailingZeroCount; 

    NumberTextWatcher(EditText inputPricePerOz, String pattern) { 
     df = new DecimalFormat(pattern); 
     df.setDecimalSeparatorAlwaysShown(true); 
     dfnd = new DecimalFormat("#,###.00"); 
     this.et = inputPricePerOz; 
     hasFractionalPart = false; 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     et.removeTextChangedListener(); 

     if (s != null && !s.toString().isEmpty()) { 
      try { 
       int inilen, endlen; 
       inilen = et.getText().length(); 
       String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "").replace("$",""); 
       Number n = df.parse(v); 
       int cp = et.getSelectionStart(); 
       if (hasFractionalPart) { 
        StringBuilder trailingZeros = new StringBuilder(); 
        while (trailingZeroCount-- > 0) 
         trailingZeros.append('0'); 
        et.setText(); //<- Here it throws an error. 
       } else { 
        et.setText(); //<- Here it throws an error. 
       } 
       et.setText(); //<- Here it throws an error. 
       endlen = et.getText().length(); 
       int sel = (cp + (endlen - inilen)); 
       if (sel > 0 && sel < et.getText().length()) { 
        et.setSelection(sel); 
       } else if (trailingZeroCount > -1) { 
        et.setSelection(et.getText().length() - 3); 
       } else { 
        et.setSelection(et.getText().length()); 
       } 
      } catch (NumberFormatException | ParseException e) { 
       e.printStackTrace(); 
      } 
     } 

     et.addTextChangedListener(this); 
    } 

私はJavaについてほとんど知りませんが、setText()メソッドでテキストを設定するだけで十分だと思いますが、このエラーの原因はわかりません。 何か助けていただければ幸いです

+0

これらのメソッドはパラメータを取る...ドキュメントをお読みください。メソッドは解決できます。それに対する引数(none)は適用できません。 –

+0

@ cricket_007素早いコメントをいただきありがとうございます。setText( "@ string/hello_world")などのsetText()メソッドにパラメータを設定したいとしますか?私は理解していません "その議論は適用できません。"申し訳ありませんが、私は昨日学習を始めたように、私はJavaのノブです! – Jackherer

+0

さて、 'setText(R.string.hello_world)'はあなたにその値を与えます(それがあなたの後にある場合)。あなたが書いたものは、文字通りEditTextに書き込まれます。しかし、はい、あなたは文字列リテラルまたは文字列リソースを提供する必要があります –

答えて

0

EditTextのドキュメントをチェックすると、メソッドは文字列とバッファタイプを取ります。したがって、変更するテキストとバッファタイプを追加する必要があります。おそらくTextView.BufferType.EDITABLEが必要です。

et.setText("Example text", TextView.BufferType.EDITABLE); 

はもっとここにhttps://developer.android.com/reference/android/widget/EditText.html

+0

あなたは 'TextView'から継承したメソッドを見逃しています。バッファタイプは必要ありません –

1

間違った構文を参照してください。これは、任意の1

 et.setText("Text to set in editext"); 
OR 
     et.setText(R.string.app_name); 
OR 
     et.setText("Text to set in editext", BufferType.EDITABLE); 

以下のようなAPIのドキュメント参照してくださいする必要があります。だから、 https://developer.android.com/reference/android/widget/EditText.html#setText(java.lang.CharSequence, android.widget.TextView.BufferType)
& https://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

0

をI figuなぜ、エラーが投げ出されているのか、私は説明できない簡単な間違いですが、コードをコピーして貼り付けたときに、何らかの理由でコピーが欠落してしまった、あるいはアンドロイドスタジオ/ :

 @Override 
    public void afterTextChanged(Editable s) { 
     et.removeTextChangedListener(this); //<- also fixed error an error here 

     if (s != null && !s.toString().isEmpty()) { 
      try { 
       int inilen, endlen; 
       inilen = et.getText().length(); 
       String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "").replace("$",""); 
       Number n = df.parse(v); 
       int cp = et.getSelectionStart(); 
       if (hasFractionalPart) { 
        StringBuilder trailingZeros = new StringBuilder(); 
        while (trailingZeroCount-- > 0) 
         trailingZeros.append('0'); 
        et.setText(df.format(n) + trailingZeros.toString()); //<- Fixed error 
       } else { 
        et.setText(dfnd.format(n)); //<- Fixed error 
       } 
       et.setText("$".concat(et.getText().toString())); //<- Fixed error 
       endlen = et.getText().length(); 
       int sel = (cp + (endlen - inilen)); 
       if (sel > 0 && sel < et.getText().length()) { 
        et.setSelection(sel); 
       } else if (trailingZeroCount > -1) { 
        et.setSelection(et.getText().length() - 3); 
       } else { 
        et.setSelection(et.getText().length()); 
       } 
      } catch (NumberFormatException | ParseException e) { 
       e.printStackTrace(); 
      } 
     } 

     et.addTextChangedListener(this); 
    } 
関連する問題