1

TextEditこのコードを使用して、単純な検証を実装しました。

    title = (EditText) findViewById(R.id.title);
    title.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
             if (title.getText().length() < 1) {
                    title.setError( "Title is required" );
               } else {
                    title.setError(null); 
               }
            
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
            
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            
        }
    });

この関数は、a に挿入されたテキストがあるかどうかをチェックしtextchange、すべてが完全に機能するかどうかを確認します。カーソルを既に空のタイトル フィールドに置き、もう一度 [削除] を押します。textwatcherテキストの変更がないため、エラー メッセージはリセットされ、は呼び出されません。この場合、どうすればエラーメッセージを表示できますか?

4

3 に答える 3

0

キーボードがキーコマンドを送信してもテキストが同じままである場合、内部的TextViewにフラグと呼び出しがあるようです。そのため、テキストが "" の場合に削除キーを飲み込むようsetError(null)にサブクラスEditText化して実装しました。XMLファイルでonKeyPreIme()使用するだけです:EditTextErrorFixed

package android.widget;

import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.KeyEvent;

public class EditTextErrorFixed extends EditText {
    public EditTextErrorFixed(Context context) {
        super(context);
    }

    public EditTextErrorFixed(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextErrorFixed(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /**
     * Don't send delete key so edit text doesn't capture it and close error
     */
    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (TextUtils.isEmpty(getText().toString()) && keyCode == KeyEvent.KEYCODE_DEL)
            return true;
        else
            return super.onKeyPreIme(keyCode, event);
    }
}
于 2012-12-21T01:31:25.123 に答える
0

メソッドをオーバーライドすることもできるはずですonKeyUp( http://developer.android.com/reference/android/view/KeyEvent.Callback.html )。そこで、押されたキーが であるかどうかKeyEvent.KEYCODE_DELを確認してから、EditText のテキストが空であるかどうかも確認します。そうである場合は、エラーをスローします。

于 2012-11-12T16:20:43.303 に答える