使用单选按钮更改"mode",同时能够使用 TextWatcher



我正在开发一个简单的应用程序,可以在句子中翻转单词。我需要它有三种方法,具体取决于用户通过启用单选按钮选择的模式。因此,我使用RadioGroup作为父布局,以便能够一次启用一个RadioButton。 我可以通过切换他们的 ID 来实现这一点。

modeGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.rb_mode_1:
String[] nowTyping = input.getText().toString().split(" ");
ArrayList<String> wordArray = new ArrayList<>();
for (String word : nowTyping){
wordArray.add(0, word);
}
String invertedSentence = TextUtils.join(" ", wordArray);
output.setText(invertedSentence);
break;
//And so...
}
}
});

现在,由于输出文本是在用户键入时打印的,因此我使用TextWatcher将用户键入的内容直接显示在 textView 中。现在我无法更改模式,因为翻转单词的代码实际上是从类实现onTextChanged()方法调用的。

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String[] nowTyping = input.getText().toString().split(" ");
ArrayList<String> wordArray = new ArrayList<>();
for (String word : nowTyping){
wordArray.add(0, word);
}
String invertedSentence = TextUtils.join(" ", wordArray);
output.setText(invertedSentence);
}

我的问题是,在使用 TextWatcher 时,我如何才能满足我的需求?实际上,我可以更改模式而无法通过实时输出获取文本,或者可以在无法更改模式的情况下输出文本。

我使用getCheckedRadioButtonId()直接在onTextChanged()TextWatcher方法中RadioGroup的方法解决了这个问题,如下所示:

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (modeGroup.getCheckedRadioButtonId() == R.id.rb_mode_1) {
String[] nowTyping = input.getText().toString().split(" ");
ArrayList<String> wordArray = new ArrayList<>();
for (String word : nowTyping) {
wordArray.add(0, word);
}
String invertedSentence = TextUtils.join(" ", wordArray);
output.setText(invertedSentence);
}
else if (modeGroup.getCheckedRadioButtonId() == R.id.rb_mode_2){
//Do mode 2 stuffs...
}
....
}

有时,在要求其他人为我们做之前,我们只是挖掘得不够多。

相关内容

  • 没有找到相关文章

最新更新