在能够使用 TextWatcher 的同时使用 RadioButtons 更改 "mode"

Using RadioButtons to change "mode" while being able to use TextWatcher

我正在开发一个简单的应用程序,可以翻转句子中的单词。我需要它有三种方法来执行此操作,具体取决于用户通过启用 RadioButtons 选择的模式。所以我使用 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 中。现在我无法更改模式,因为翻转单词的代码实际上是从 class 实现的 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 的同时如何实现我的需求?其实我可以在不能实时输出文本的情况下改变模式,或者在不能改变模式的情况下输出文本。

我直接在 TextWatcheronTextChanged() 方法中使用 RadioGroupgetCheckedRadioButtonId() 方法解决了这个问题,如下所示:

@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...
    }
     ....
}

有时候我们只是没有挖掘足够的东西,然后才要求别人为我们做。