【问题标题】:How to set a EditText listener for specific numbers?如何为特定数字设置 EditText 侦听器?
【发布时间】:2016-01-05 17:24:53
【问题描述】:

我想在应用程序中为我的EditText 字段设置一个侦听器,该侦听器应该侦听我想到的特定数字行。

例如: 如果用户输入数字“12345”并按下按钮,则必须显示toast 消息。如果用户输入“12345”以外的数字,button 必须运行他的主函数。

我希望它作为我的应用程序中的一个小彩蛋。

【问题讨论】:

  • editText.getText().equals("12345") ????
  • 但是如何运行一个特定的动作比呢?
  • 只需维护一个允许的数字或文本列表,并在按钮的 onClick 侦听器中对其进行检查。只需放置一个 if 循环并运行特定操作。

标签: android button android-edittext keyword toast


【解决方案1】:

EditText 允许你添加一个 TextWatcher 视图 addTextChangedListener(TextWatcher):

假设你有:

EditText mEditText = (EditText) findViewById(R.id.my_edit_text);

然后我们可以给它添加一个TextWatcher:

// Add the TextChangeListener which is a TextWatcher
mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
             //... For listening to text on the fly
             if(s.toString().equals("12345")){
                  Toast.makeText(MyActivity.this, "Some message" Toast.LENGHT_SHORT).show();
              }
            }

            @Override
            public void afterTextChanged(Editable s) {
               //... for a callback after text is changed
            }
        });

【讨论】:

    【解决方案2】:

    详细说明@Kristo1990 的回答:

    EditText editText = (EditText) findViewById(R.id.my_edit_text);
    

    然后按下按钮:

    if (editText.getText().toString().equals("12345")) {
        Toast.makeText(getApplicationContext(), "Message is 12345", Toast.LENGTH_SHORT).show();
    } else {
        someOtherMethod();
    }
    

    比不必要的TextWatcher更安全(更轻)。

    【讨论】:

      【解决方案3】:

      添加一个 onTextChanged 监听器

      mEditText.addTextChangedListener(new TextWatcher()
          {
              @Override
              public void beforeTextChanged(CharSequence s, int start, int count, int after)
              {
      
              }
      
              @Override
              public void onTextChanged(CharSequence s, int start, int before, int count)
              {
                  if(mEditText.getText().toString().equals("12345"))
                     //do stuff
              }
      
              @Override
              public void afterTextChanged(Editable s)
              {
      
              }
          });
      

      【讨论】:

        【解决方案4】:

        只需使用 If 语句来检查 editText 的值,例如:

         if(editText.getText().equals("12345"))
         {
         Toast.makeText(getApplicationContext(), "Message is 12345",Toast.LENGTH_SHORT).show();
         }
        

        希望对你有帮助。

        【讨论】:

        • 这里的任何答案都可以实际工作,谢谢你:)!
        • 你的更干净。创建一个 TextWatcher 容易出现很多 ANR,使用获取文本的简单方法更“安全”,但我会改进它。为了安全起见,editText.getText().toString() ;)
        • 说得好,对于toString() 方法。关于 textWatcher 我不会说太多,因为我还没有读到任何关于它的内容。但是,你知道它对很多程序员来说是怎样的,如果它有效,它就有效。
        猜你喜欢
        • 2013-11-30
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 2014-10-10
        • 2011-05-17
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        相关资源
        最近更新 更多