【问题标题】:How to test Android EditTex for content如何测试 Android EditText 的内容
【发布时间】:2015-04-16 01:08:12
【问题描述】:

在用户按下设备上的返回按钮后,我希望测试 EditText 的内容。

如果 EditText 没有内容(用户从未输入任何内容,或者他们输入了一些输入,然后通过退格将其全部删除),则返回上一个活动(屏幕)。

否则,EditText 有内容,因此触发 alertDialog 以查看他们是否要“放弃” EditText 输入并返回上一个活动(屏幕),

或“取消”AlertDialog 以返回到 EditText 并更改/添加到现有输入。

我的后退按钮代码可以很好地返回到上一个活动(下面的部分列表):

public boolean onKeyPreIme ( int keyCode, @NonNull KeyEvent event){
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        // the key has been pressed down
        if (event.getAction() == KeyEvent.ACTION_DOWN
                && event.getRepeatCount() == 0) {    

我正在寻求有关如何将该代码与 EditText 内容测试的 if/then 逻辑链接的帮助。我开始了:

final EditText todoEditText = (EditText) findViewById(R.id.CEditText);
    int sTodo = todoEditText.getText().toString().trim().length();
        if (sTodo == 0) {
            run code to hide the keyboard and go to the previous activity
        }
        else {
            run code to show the alertDialog
        }

【问题讨论】:

    标签: android android-edittext back keyevent


    【解决方案1】:

    可以在 onStop 或 onDestroy 中处理函数,如果您将返回之前的活动会更好。 然后你可以检查EditText内容是否为null。

    String tmp = mEditText.getText().toString.trim();
    if (null != tmp && !("").equals(tmp)) {
       //code
    } else {
       //code
    }
    

    【讨论】:

      【解决方案2】:

      嗯...为什么不将数据传递给字符串,然后检查字符串是否为空?

      String strTodo = todoEditText.getText().toString().trim();
      if (!strTodo.isEmpty() && !strTodo.equalsIgnoreCase("")) {
         // run code to hide the keyboard and go to the previous activity
      } else {
         // run code to show the alertDialog
      } 
      

      我对您所解释的内容的更大问题是您如何在活动之间处理数据。相反,使用 Intents 和 Extras 将数据从一个 Activity 传递到另一个 Activity。将你的 editText 数据传递给一个字符串,正如我之前在 Extras 中提到的那样,在你的下一个 Activity 中,并在你的下一个 Activity 中使用该数据来确定流程。不要将 Activity 保留在堆栈上,以便您可以返回到它并开始使用已经存在的数据,这是一个坏主意。但是,如果这是您想要做的,请利用 Android 的生命周期并在 onResume() 中返回上一个 Activity 时检查您的 editText。

      最后,听起来您可能也需要一个听众。以防万一,就在这里。

      todoEditText.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) {
      
          }
      
          @Override
          public void afterTextChanged(Editable s) {
      
          }
      
      });
      

      【讨论】:

      • 是的,我看到了侦听器 TextWatcher 代码,不想在代码之前和之后使用。但是,对于您的答案,执行 EditText 内容测试的初始驱动程序是用户按下了后退按钮,而不是他们为 EditText 键入了输入。想法?
      • 首先,你为什么要在backstack上的Activity中持久化数据?与试图确定文本是否仍在 editText 视图中(内存问题)相比,您将遇到更多问题。其次,如果您真的想这样做,请在 onResume 中检查我在上面发布的 editText 并做您想做的事情。
      • 这里是 Android 的新手。如果 EditText 中没有输入数据,那么我想将用户返回到上一个活动(屏幕)。你是说我需要在将用户返回到上一个活动之前使用 finish() 销毁当前活动以避免内存泄漏?
      • 我是说将数据与附加信息一起传递,然后使用附加信息中的数据来确定您是否要定向到哪里。这将比显示仅检查先前输入的数据然后转换到另一个 Activity 的 Activity 更好。我将更新我的答案以进一步解释。
      • 我需要更清楚。第一个活动是欢迎屏幕。用户单击菜单项和意图启动第二个活动。然后,用户可以在作为屏幕视图一部分的 EditText 行上键入输入。我正在寻找字符串代码来测试 EditText 行。如果 String > 0 因为用户在 EditText 行上输入了一些数据,然后他们按下返回键,我想显示一个 AlertDialog。如果 String = 0 因为 EditText 行是空的 & 然后用户按下返回键我想关闭软键盘并返回到上一个(欢迎屏幕)。
      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2020-01-21
      相关资源
      最近更新 更多