1

私の AlertDialog には、特定の条件が満たされたときにテキストが自動入力される が含まれていますbutton3 text fields

すべてのテキスト フィールドが空でない場合、ボタンのデフォルト テキストを に変更していますAssign

テキストは変更されていますが、UI では元のテキストが表示されたままです。

クラスTextWatcherを使用して、3 つのフィールドのテキストを監視し、ボタンのテキストを変更しています。

私の短いコード:

private class LocalTextWatcher implements TextWatcher {

        @Override
        public void afterTextChanged(Editable s) {

            //the three text fields
            String equipNumText = equipnumbertext.getText().toString().trim();
            String plateNumText = licenseplatetext.getText().toString().trim();
            String vinNumtext = vintext.getText().toString().trim();

            if(!equipNumText.equals("") && !plateNumText.equals("") && !vinNumtext.equals(""))
            {

                //the button
                lookupButton = (Button)findViewById(R.id.lookupbtn);

                System.out.println("Default Button value"+lookupButton.getText()); //Look Up

                lookupButton.setText("Assign");

                //lookupButton.invalidate();
                //lookupButton.refreshDrawableState();

                System.out.println("Button value after change"+lookupButton.getText()); //Assign
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
    }

私の出力はボタンの値に変更があることを示していますが、私のAlertDialog UIは変更で更新されていません。

lookupButton.invalidate() また、 OR/AND を使用してもlookupButton.refreshDrawableState()成功しませんでした。

4

1 に答える 1

0

非常に奇妙ですが、テキストの変更onCreate()により、アクティビティのオーバーライドされたメソッドへの呼び出しがトリガーされ、lookupButton の値が再び に設定されることは事実Look Upです。

次のコード行があります。

@Override
    public void onCreate(Bundle savedInstanceState) {
.......
.......
TextWatcher watcher = new LocalTextWatcher();
equipnumbertext.addTextChangedListener(watcher);
licenseplatetext.addTextChangedListener(watcher);
vintext.addTextChangedListener(watcher);
lookupButton.setText("Look Up");
.......
.......
}

private class LocalTextWatcher implements TextWatcher {

        @Override
        public void afterTextChanged(Editable s) {
        .......
        .......
}

3 つのフィールドのテキストが変更されると、onCreate()メソッドが呼び出され、ボタンの値が再び に設定されますLook Up

于 2013-10-24T07:07:27.113 に答える