одиночный edittext должен вызывать textwatcher или действовать как textview android

Привет, в моем приложении есть 2 editText, которые должны отображать значение, если ввод edittext осуществляется из какого-либо метода, и если ввод в editText осуществляется с клавиатуры, тогда он должен вызывать textwatcher.

то есть:

  • если edittext1 имеет ввод с виртуальной клавиатуры, то запускает TextWatcher, который вызовет метод и отобразит значение в edittext2 [здесь edittext2 действует как текстовое представление]

  • если в edittext2 есть ввод с виртуальной клавиатуры, тогда запустите textwatcher, который вызовет метод и отобразит результат в edittext1 [здесь edittext1 действует как текстовое представление]

Это возможно? если да, пожалуйста, скажите мне концепции, чтобы следовать.

Благодарность


person Sham    schedule 15.10.2014    source источник


Ответы (1)


Непосредственная реализация, вероятно, приведет к СБОЙ вашего приложения. Вы можете обойти это, используя переменную флага

public class MainActivity extends Activity {

    EditText et1, et2;
    String flag = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et1 = (EditText) findViewById(R.id.editText1);
        et2 = (EditText) findViewById(R.id.editText2);

        // Here update the flag variable to keep track which text view is in use
        et1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                flag = "ET1";
            }
        });

        // Here update the flag variable to keep track which text view is in use
        et2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                flag = "ET2";
            }
        });

        et1.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) {
                // Set the value of editText2 value here if only flag contains
                // ET1
                // This will prevent changes if ET2 is being used
                if (flag.equals("ET1")) {
                    et2.setText(s);
                }
            }
        });

        et2.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) {
                // Set the value of editText1 value here only if flag equals ET2
                if (flag.equals("ET2")) {
                    et1.setText(s);
                }
            }
        });
    }
}

Выполнить Здесь дважды щелкните EditText, прежде чем вводить текст. Вы можете еще больше улучшить это, включив и отключив текст редактирования в соответствующих ситуациях и, следовательно, сделав это, вы можете добиться того же одним щелчком мыши.

Если у вас есть вопросы по коду, пожалуйста, прокомментируйте ниже.

person codePG    schedule 16.10.2014
comment
спасибо, но не могу использовать флажок, потому что количество нажатий клавиш должно быть уменьшено ... есть ли способ обнаружить ввод текста редактирования с виртуальной клавиатуры? - person Sham; 16.10.2014
comment
TextWatcher поможет вам в этом случае. И не могли бы вы подробнее объяснить, что вы подразумеваете под number of keystroke must be reduced - person codePG; 16.10.2014
comment
в моем приложении должно быть только 5 edittext и никаких других виджетов ... нельзя ли это сделать извне, поэтому, когда нажатие клавиши происходит от виртуальной клавиши, затем вызывайте функцию наблюдателя, иначе действуйте как текстовое представление? - person Sham; 16.10.2014
comment
Как насчет этого. Установите прослушиватель onClick как для текста редактирования, теперь в зависимости от того, какой текст редактирования щелкнут, установите значение для некоторой переменной (аналогично тому, как я использовал флажок), и перед установкой значений для текста редактирования проверьте значения переменной и установите соответственно. - person codePG; 16.10.2014
comment
извините, не могу подписаться, пожалуйста, объясните - person Sham; 16.10.2014
comment
Дайте мне пять минут, я обновлю свой ответ, который будет использовать только два текста редактирования и больше никаких виджетов. Code explains more better - person codePG; 16.10.2014