在能够使用 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 的同时如何实现我的需求?其实我可以在不能实时输出文本的情况下改变模式,或者在不能改变模式的情况下输出文本。
我直接在 TextWatcher
的 onTextChanged()
方法中使用 RadioGroup
的 getCheckedRadioButtonId()
方法解决了这个问题,如下所示:
@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...
}
....
}
有时候我们只是没有挖掘足够的东西,然后才要求别人为我们做。
我正在开发一个简单的应用程序,可以翻转句子中的单词。我需要它有三种方法来执行此操作,具体取决于用户通过启用 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 的同时如何实现我的需求?其实我可以在不能实时输出文本的情况下改变模式,或者在不能改变模式的情况下输出文本。
我直接在 TextWatcher
的 onTextChanged()
方法中使用 RadioGroup
的 getCheckedRadioButtonId()
方法解决了这个问题,如下所示:
@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...
}
....
}
有时候我们只是没有挖掘足够的东西,然后才要求别人为我们做。