2

この特定のコードを実行すると、StackOverflowエラーが発生します。

litera.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable s) {}
            public void beforeTextChanged(CharSequence s, int start, int count, int after){}
            public void onTextChanged(CharSequence s, int start, int before, int count){
                String ghici = litera.getText().toString();
                System.out.println(ghici);
                litera.setText("");
            }

        }); 

一度に各行にコメントしたところ、原因はlitera.setText( "");であることがわかりました。ライン、他は正常に動作します。私は以前にそれを使用しましたが、特に単純な命令がなぜそのような悪いエラーを引き起こすのか私を困惑させます...残りのエラーメッセージは「android.view.ViewGroup.addFocusables(ViewGroup.java:637)」などに関するものです、しかし、私はそれらが決定的であるとは思えません。

私は何が欠けていますか?

4

4 に答える 4

3

同じのTextView内からテキストを設定している場合は、無限ループを設定しているため、が発生します。TextViewTextWatcherStackOverflowException

于 2012-06-27T11:54:20.863 に答える
2

あなたはこのように使わなければなりません

 litera.addTextChangedListener(new TextWatcher(){
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){
            String strEnteredVal = litera.getText().toString();
            if(!strEnteredVal.equals("")){
            System.out.println(strEnteredVal);
            litera.setText("");
            }
        }

    }); 
于 2012-06-27T12:01:13.473 に答える
0

onChangeリスナーからテキストを変更しているため、この問題が発生しています。何が起こるかというと、ユーザーがテキストを変更すると、メソッドが呼び出され、次にテキストが変更され、リスナーonTextChangeが再び呼び出されます。onTextChangeリスナーからのテキストを変更する必要がある場合は、コードからのテキストの変更をなんらかの方法で無視し、ユーザーからの変更のみを処理する必要があります。たとえば、次のようなことを試すことができます。

litera.addTextChangedListener(new TextWatcher(){
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){
            if(count > 0) {
                String ghici = litera.getText().toString();
                System.out.println(ghici);
                litera.setText("");
            }
        }
    });

これにより、edittextコンテンツが(コードによって)消去されたすべての変更が無視されます。

于 2012-06-27T11:55:29.940 に答える
0

onTextChangedリスナー内でsettextメソッドを呼び出しています。これにより、リスナーはonTextChangedメソッドを何度も起動します。これはstackOverflowエラーを引き起こしています

于 2012-06-27T11:55:53.763 に答える