java - 如何捕获 EditText 上字符串的值?

标签 java android xml string android-edittext

我正在使用用户代码和密码进行登录。然后,当字段完成时,有一个按钮“登录”被设置。Enabled(false)并且它将被设置。Enabled(true)允许访问(我这样做是为了避免一致性测试)。

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

    final EditText codigo;
    final TextView nome;
    final EditText senha;

    codigo = (EditText) findViewById(R.id.cod_edit_text);
    senha = (EditText)findViewById(R.id.senha_edit_text);

    String cod = codigo.getEditableText().toString();
    String password = senha.getEditableText().toString();

    final Button botaologar = (Button) findViewById(R.id.button_logar);
    if(!cod.isEmpty() || !password.isEmpty())
    {
        botaologar.setClickable(true);
        botaologar.setEnabled(true);
    }
    else
    {
        botaologar.setEnabled(false);
        botaologar.setClickable(false);
    }

但是,当我捕获 EditText 的字符串时,由于某种原因它是空的,并且按钮仍然设置。Enabled(false)。

我注意到,当我在 Activity_main.xml 的 XML 上命名并在 string.XML 上使用某个值的字符串时,按钮保持 set.Enabled(true) 状态,但该值显示在 EditText 上,并带有字符串.xml。看:

文件activity_main.xml:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:ems="10"

    android:text="@string/cod_edit_text"

    android:id="@+id/cod_edit_text"
    android:layout_below="@+id/codigo_text_view"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true" />
<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/senha_edit_text"

    android:text="@string/senha_edit_text"

    style="@style/AppTheme"
    android:password="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/senha_text_view"
    android:layout_alignParentLeft="true" />

文件 string.xml:

<string name="cod_edit_text"> test </string>
<string name="senha_edit_text"> test  </string>

所以,问题是我无法使按钮保持 .setEnabled(true) 因为我无法正确获取 EditText 的值。有办法解决这个问题吗?

最佳答案

使用TextWatcher:

示例

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
private EditText passwordEditText;
private TextView textView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /* Initializing views */
    passwordEditText = (EditText) findViewById(R.id.password);
    textView = (TextView) findViewById(R.id.passwordHint);
    textView.setVisibility(View.GONE);

    /* Set Text Watcher listener */
    passwordEditText.addTextChangedListener(passwordWatcher);
 }

 private final TextWatcher passwordWatcher = new TextWatcher() {
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        textView.setVisibility(View.VISIBLE);
    }

    public void afterTextChanged(Editable s) {
        if (s.length() == 0) {
            textView.setVisibility(View.GONE);
        } else{
            textView.setText("You have entered : " + passwordEditText.getText());
        }
    }
 };
}

您始终可以启用或禁用 TextWatcher 的 beforeTextChanged 或 afterTextChanged 中的按钮。根据您的要求。

关于java - 如何捕获 EditText 上字符串的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637417/

相关文章:

sql - 从 SQL Server 2008 中的 XML 节点获取最大值

javascript - 将 JSON 数据解析为 HTML

java - 查找数字字符串中的最大数字

java - @JsonFormat 不适用于自定义序列化器

java - 为什么Java中的main方法总是需要参数?

android - 如何在 Android 应用程序中更新/制作实时图标?

java - fragment Activity 显示后退按钮

xml - 使用 XML 格式化 Excel 单元格

java - 使用hibernate,如何在xml中编写@OneToMany(mappedBy ="somethingFkId")?

android - TestCase 类 junit.extensions.ExceptionTestCase 缺少没有参数或单个 String 参数的公共(public)构造函数