当EditText文本与字符串匹配时更改TextView文本。没有按钮

时间:2013-07-05 02:37:46

标签: android mobile android-edittext textview

我在方法中使用了一个字符串变量,我想将EditText中的文本与该变量进行比较。

一旦匹配,我想将TextView更新为与目前不同的东西。代码如下:

public void textChangeMethod() {

TextView myText = (TextView)findViewById(R.id.my_Text);
EditText myEdit = (EditText)findViewById(R.id.my_Edit);

String testString = "Test";
String matchString = myEdit.getText().toString();

if(matchString == testString){
   myText.setText("Finished")
}

然而,问题是,这个if语句在用户输入完全单词之前运行,并且它永远不会成立。我不会用按钮来解雇它。

我尝试过实现TextWatcher,但没有任何反应。我是Android开发的新手,我不确定我是否完全理解如何使用它。

我还考虑过使用倒数计时器,然后使用while循环来不断检查字符串的编辑文本值。我希望尽可能高效。

以下完整代码

public class NewClass extends Activity {

@SuppressLint("NewAPI")



protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game_screen);

    // Show the Up button in the action bar.
    setupActionBar();

    textChangeMethod();


}





public void textChangeMethod() {



    //Local variables
    final TextView myText = (TextView)findViewById(R.id.my_Text);
    final String testString = "Test";
    EditText myEdit = (EditText)findViewById(R.id.my_Edit);
    final String matchString = myEdit.getText().toString();




    TextWatcher filterTextWatcher = new TextWatcher() { 

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,int after)
        {
        }

        @Override
        public void onTextChanged(CharSequence s,int i, int i2,int i3)   
        {
            if(!TextUtils.isEmpty(s) && matchString.equals(s)){
          myText.setText("Finished");
        }
        }

        @Override
        public void afterTextChanged(Editable arg0) 
        {   
        }
    };

    myEdit.addTextChangedListener(filterTextWatcher);

}

最终编辑

这两个答案都有帮助。我也可以在网上查看更多关于Text Watcher的文章。

我需要使用'aterTextChange'。但是,现在我遇到了一个新问题。如果我无法弄清楚,我会回来发一个新问题。

一如既往,感谢您的支持。

最终编辑#2

所以我在实现afterTextChanged之后遇到的问题是我的应用程序崩溃并且一直闪烁,并且完全无法使用。

快速堆栈搜索后,我需要实现removeTextChangedListener才能停止被调用。

一切都很好。我希望我能接受这两个答案。谢谢。

2 个答案:

答案 0 :(得分:1)

Textwatcher是你的解决方案,如果你有问题要实现它,请发布你的代码,但这是一个实现Textwatcher的示例代码,你可以把你的if语句放在onTextChange()回调函数中:

TextWatcher filterTextWatcher = new TextWatcher() { 
        public void beforeTextChanged(CharSequence s, int start, int count,int after)
        {
        }

        public void onTextChanged(CharSequence s,int start, int before,int count)   
        {
          if(s.equals(testString)){
          myText.setText("Finished")
        }
        }

        @Override
        public void afterTextChanged(Editable arg0) 
        {   
        }
    };

    EditText filterText = (EditText)dialog.findViewById(R.id.edtItemFilter);
    filterText.addTextChangedListener(filterTextWatcher);

并且也不要使用==运算符来比较字符串,而是使用:

  

如果(matchString.equals(的TestString))

答案 1 :(得分:1)

TextWatcher应该可以正常工作,您只需要初始化一次侦听器,因此在Activity中的 onCrateView() 中。同样@Arash说使用 .equals(CharSequence c) 而不是 == 操作数。除此之外,希望您的问题得到解答。

final TextView myText = (TextView)findViewById(R.id.my_Text);
EditText myEdit = (EditText)findViewById(R.id.my_Edit);

myEdit.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {}

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        if(!TextUtils.isEmpty(charSequence) && myText.equals(charSequence)) {
            // Do something with myText
        }
    }
    @Override
    public void afterTextChanged(Editable editable) { }
});

修改

看完你的完整代码后这一行:

final String matchString = myEdit.getText().toString();

此String将为空,因此它永远不会评估该语句。它是空白的,因为用户从未输入任何东西。假设你想匹配字符串“Hello”,你会这样做:

public void textChangeMethod() {
    final TextView myText = (TextView)findViewById(R.id.my_Text);
    EditText myEdit = (EditText)findViewById(R.id.my_Edit);
    final String matchString = "Hello";

    TextWatcher filterTextWatcher = new TextWatcher() { 

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,int after) {}

        @Override
        public void onTextChanged(CharSequence s,int i, int i2,int i3)   
        {
            if(!TextUtils.isEmpty(s) && matchString.equals(s)){
               myText.setText("Finished");
            }
        }

        @Override
        public void afterTextChanged(Editable arg0) {}
    };

    myEdit.addTextChangedListener(filterTextWatcher);
}