android - TextWatcher onTextChanged नरम कीबोर्ड ऑटो-पूर्ण/सुझाए गए शब्दों के साथ काम नहीं कर रहा है



android-edittext android-softkeyboard (1)

इसके बाद पाठ के लिए जाने के लिए बेहतर तरीका है।
निम्नलिखित नमूने में, आगे की प्रक्रिया के लिए एक हैंडलर का उपयोग करके प्रवेश किया गया टेक्स्ट पुनर्प्राप्त और प्रबंधित किया जाता है

    EditText text1;
    StringBuffer previousChar=new StringBuffer();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    text1=(EditText)findViewById(R.id.editText);
    text1.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                }
                @Override
                public void afterTextChanged(Editable s) {
                    if(!previousChar.toString().equals(s.toString())){
                        Message msg=new Message();
                        msg.obj=s.toString();
                        localHandler.sendMessage(msg);
                        previousChar=new StringBuffer(s.toString());
                        Log.i("TAG", "TextEntered = "+s);
                    }
                }
            });}

और हेन्डलर में

private Handler localHandler = new Handler(){
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String value=(String)msg.obj;
            //Your logic with the text entered that is retrieved 
        }
    };

जब भी उपयोगकर्ता द्वारा कोई नया अक्षर दर्ज किया जाता है, तब मैं टेक्स्ट के भीतर कीवर्ड्स की एक श्रृंखला को खोजने और उसे रेखांकित करने के लिए एक TextWatcher को लागू कर रहा हूं। हालांकि जब नरम कीबोर्ड पर सुझाए गए / ऑटो-पूर्ण शब्द का चयन किया गया है, तो एडिटेक्स्ट को सुझाए गए शब्दों को जोड़ने के बजाय और फिर ऑन-टेस्ट चेंंक किए गए फ़ंक्शन को बुलाते हुए आधे पूर्ण शब्द को हटा दिया गया है। मुझे यह अजीब लगता है कि व्यक्तिगत वर्णों में प्रवेश के रूप में, onTextChanged फ़ंक्शन को सक्रिय करता है बस ठीक है। किसी भी तरह की सहायता का स्वागत किया जाएगा।

पुनश्च। अगर किसी को मक्खी पर एक संपादन टेक्स्ट की प्रक्रिया का बेहतर तरीका पता है तो कृपया मुझे बताएं

कोड:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_codify_test);
    final EditText editText = (EditText) findViewById(R.id.editText_codifyTest);
    editText.addTextChangedListener(new TextWatcher() {

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

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!checked) { //stop infinite loop
                checked = true;
                cursorPosition = editText.getSelectionStart(); //get cursor position before text modification
                codifyText(editText);
            } else {
                checked = false;
            }
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

//Find and underline keywords
private void codifyText(EditText editText) {
    String plainText = editText.getText().toString() + " ";
    int prevWhiteSpace = 0;
    final Context context = this;
    SpannableString codifiedText = new SpannableString(plainText.substring(0, plainText.length() - 1));
    if (codifiedText.length() == 0) return;

    for (int i = 0; i < plainText.length(); i ++){
        if (Character.isWhitespace(plainText.charAt(i))){
            String currWord = plainText.substring(prevWhiteSpace, i);
            if (isKeyWordInDataBase(currWord)) {
                ClickableSpan clickableSpan = new ClickableSpan() {
                    @Override
                    public void onClick(View view) {

                    }
                };
            codifiedText.setSpan(clickableSpan, prevWhiteSpace, i, 0);
            }
            prevWhiteSpace = i + 1;
        }
    }
    editText.setMovementMethod(LinkMovementMethod.getInstance());
    editText.setText(codifiedText, TextView.BufferType.SPANNABLE);
    editText.setSelection(cursorPosition); //set cursor to position prior to edit
}




android-textwatcher