использование TextWatcher() в Android

Я создаю приложение, в котором, если пользователь вводит «o» или «O» в начале текста редактирования, должно быть выполнено следующее:

замените введенное «o» или «O» на «P» во время выполнения в EditText и установите для TextView значение «ORANGE».

Точно так же, если пользователь вводит «g» или «G», тогда введенное «g» или «G» следует заменить на «P» во время выполнения в EditText и установить для TextView значение «Зеленый». и т. д.... как я могу это сделать. Я использую TextWatcher(), но не могу достичь цели. Помощь будет оценена по достоинству.

package com.example.answer;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

 public class data extends Activity implements OnClickListener {

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

}

Button start, startFor;
EditText sendET;
TextView gotAnswer, result;
int flag = 1;
TextWatcher tt = null;
int i = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initialize();

    final EditText sendET = (EditText) findViewById(R.id.sendet);

    final TextView result = (TextView) findViewById(R.id.tv);

    tt = new TextWatcher() {
        public void afterTextChanged(Editable s) {
            sendET.setSelection(s.length());

        }

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

        }

        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (sendET.getText().toString() == "o") {
                flag = 0;
            }
            sendET.removeTextChangedListener(tt);
            if (flag == 0) {
                sendET.setText(sendET.getText().toString()
                        .replaceAll("o", "P"));
                result.setText("ORANGE");

            }
            sendET.addTextChangedListener(tt);

        }
    };
    sendET.addTextChangedListener(tt);
}

private void initialize() {
    start = (Button) findViewById(R.id.button1);
    sendET = (EditText) findViewById(R.id.sendet);
    start.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.button1:

        String bread = sendET.getText().toString();
        result = (TextView) findViewById(R.id.tv);
        result.setText(bread);
        /*
         * Bundle basket = new Bundle(); basket.putString("key", bread);
         * Intent a = new Intent(data.this, openedclass.class);
         * a.putExtras(basket); startActivity(a); break;
         */

        }
    }
}

person user3837859    schedule 29.07.2014    source источник
comment
Можете ли вы разбить свой вопрос на методы, которые, по вашему мнению, работают неправильно? Я думаю, что это может помочь пользователям SO отлаживать ваше приложение.   -  person Jake Chasan    schedule 29.07.2014


Ответы (1)


if (sendET.getText().toString() == "o")

Это не правильно. Это не то, как вы проверяете равенство строк в Java. Правильное использование:

if(sendET.getText().toString().equals("o"))

Кроме того, вы удаляете своего слушателя и добавляете его снова. Я не знаю логики вашего приложения, но я думаю, вы не хотите addTextChangedListener:

public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if (sendET.getText().toString() == "o") {
            flag = 0;
        }
        sendET.removeTextChangedListener(tt); // REMOVING
        if (flag == 0) {
            sendET.setText(sendET.getText().toString()
                    .replaceAll("o", "P"));
            result.setText("ORANGE");

        }
        sendET.addTextChangedListener(tt); // ADDING AGAIN

    }
person Gintas_    schedule 29.07.2014