设置编辑文本框文本相对于另一个编辑文本的变化,反之亦然实时变化
On setting Edit Text box text with respect to change in another Edit text and Vice versa in real time changing
我有两个输入框(编辑文本框)在 android 布局中,我试图通过计算一些值将一个编辑文本框的文本设置为另一个编辑文本框的文本,反之亦然(从第二个文本框然后实时计算并将其添加到第一个文本框)(在编辑框输入的当前时间),我已经在 'On Text Change Listeners' 上看到了一些答案并尝试过但可能是由于聚焦问题编辑框崩溃了。
同时添加文本观察器可能会出现问题(重复出现的效果)。但是您可以通过一次激活一个文本观察器来实现您的要求。当 edittext1 文本更改时,我们将删除 edittext2 的文本观察器,我们将在 [=11] 中设置 edittext2 =] edittext1 的文本观察器。然后我们将在 edittext1 的 afterTextChanged
文本观察器中重新激活 edittext2 的文本观察器。同样的逻辑适用于 edittext1.
public class MainActivity extends AppCompatActivity {
EditText editText1,editText2,editText3,editText4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1=findViewById(R.id.editText1);
editText2=findViewById(R.id.editText2);
editText3=findViewById(R.id.editText3);
editText4=findViewById(R.id.editText4);
editText1.addTextChangedListener(textWatcher1);
editText2.addTextChangedListener(textWatcher2);
editText3.addTextChangedListener(textWatcher3);
editText4.addTextChangedListener(textWatcher4);
}
TextWatcher textWatcher1=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText2.removeTextChangedListener(textWatcher2);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText2.setText(editText1.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText2.addTextChangedListener(textWatcher2);
}
};
TextWatcher textWatcher2=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText1.removeTextChangedListener(textWatcher1);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText1.setText(editText2.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText1.addTextChangedListener(textWatcher1);
}
};
}
TextWatcher textWatcher3=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText4.removeTextChangedListener(textWatcher4);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText4.setText(editText3.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText4.addTextChangedListener(textWatcher4);
}
};
TextWatcher textWatcher4=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText3.removeTextChangedListener(textWatcher3);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText3.setText(editText4.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText3.addTextChangedListener(textWatcher3);
}
};
}
我有两个输入框(编辑文本框)在 android 布局中,我试图通过计算一些值将一个编辑文本框的文本设置为另一个编辑文本框的文本,反之亦然(从第二个文本框然后实时计算并将其添加到第一个文本框)(在编辑框输入的当前时间),我已经在 'On Text Change Listeners' 上看到了一些答案并尝试过但可能是由于聚焦问题编辑框崩溃了。
同时添加文本观察器可能会出现问题(重复出现的效果)。但是您可以通过一次激活一个文本观察器来实现您的要求。当 edittext1 文本更改时,我们将删除 edittext2 的文本观察器,我们将在 [=11] 中设置 edittext2 =] edittext1 的文本观察器。然后我们将在 edittext1 的 afterTextChanged
文本观察器中重新激活 edittext2 的文本观察器。同样的逻辑适用于 edittext1.
public class MainActivity extends AppCompatActivity {
EditText editText1,editText2,editText3,editText4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1=findViewById(R.id.editText1);
editText2=findViewById(R.id.editText2);
editText3=findViewById(R.id.editText3);
editText4=findViewById(R.id.editText4);
editText1.addTextChangedListener(textWatcher1);
editText2.addTextChangedListener(textWatcher2);
editText3.addTextChangedListener(textWatcher3);
editText4.addTextChangedListener(textWatcher4);
}
TextWatcher textWatcher1=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText2.removeTextChangedListener(textWatcher2);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText2.setText(editText1.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText2.addTextChangedListener(textWatcher2);
}
};
TextWatcher textWatcher2=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText1.removeTextChangedListener(textWatcher1);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText1.setText(editText2.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText1.addTextChangedListener(textWatcher1);
}
};
}
TextWatcher textWatcher3=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText4.removeTextChangedListener(textWatcher4);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText4.setText(editText3.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText4.addTextChangedListener(textWatcher4);
}
};
TextWatcher textWatcher4=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText3.removeTextChangedListener(textWatcher3);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
editText3.setText(editText4.getText());
}
@Override
public void afterTextChanged(Editable s) {
editText3.addTextChangedListener(textWatcher3);
}
};
}