【问题标题】:TextUtils.isEmpty(regUserOtherCity.getText().toString()) doesnt work on button pressTextUtils.isEmpty(regUserOtherCity.getText().toString()) 在按下按钮时不起作用
【发布时间】:2019-04-21 11:56:09
【问题描述】:

我有一个默认值为“其他城市”的城市微调器。如果用户找不到他的城市,当他选择其他城市时,会显示一个文本输入(您的城市)。 当用户在那里输入他的城市名称并单击按钮注册时,getText().toString() 不会返回该值。而且即使我已经编写了验证代码,当该字段为空时,它也不起作用。

Log.i("cities[0]", "("+cities[0]+")");
Log.i("regOtherCity", "("+(regUserOtherCity.getText().toString())+")");
if (userCity.equals(cities[0]) && TextUtils.isEmpty(regUserOtherCity.getText().toString()) )
{
           error = true;
            Log.i("checkerror", "("+cities[0]+")");
            regUserOtherCity.setError("Enter Your City");
            regUserOtherCity.requestFocus();
        }
        else if (userCity.equals(cities[0]))
            userCity = regUserOtherCity.getText().toString();
        Log.i("cities[0]", "("+cities[0]+")");
        Log.i("regOtherCity", "("+userCity+")");

我已经尝试使用 Logcat 进行调试,输出是用户在文本输入中输入“我的城市”时的输出。

I/cities[0]: (Other City)
I/regOtherCity: (my city)
I/cities[0]: (Other City)
I/regOtherCity: ()

已编辑:-------------- 检查发现userCity返回的值是空的。

这里是获取 userCity 值的代码..由于某些原因它不起作用。

regCitySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (String.valueOf(parent.getItemAtPosition(position)).equals(cities[0])) {
                regOtherCityLayout.setVisibility(View.VISIBLE);
               userCity = regUserOtherCity.getText().toString();
                Log.i("onItemSel userCity", "("+userCity+")");
            } else {
                regOtherCityLayout.setVisibility(View.GONE);
                userCity = String.valueOf(parent.getItemAtPosition(position));
            }
        }

【问题讨论】:

  • 所以第一个输出有“我的城市”,但在评估时它是空白的?
  • 当我在表单中输入“我的城市”作为文本输入并单击注册按钮后,该按钮是我在 Logcat 中显示的输出以进行检查。
  • 我不确定我是否正确地将您的描述与该代码相一致,但看起来userCity.equals(cities[0]) 从来都不是真的,尽管您似乎期望它是正确的。
  • 刚刚更新了问题。你能看看吗?
  • 您的 userCity 变量是关闭的。 userCity 为 null(或空字符串),因此如果永远不会为真,则执行 if/else 评估。检查你设置 userCity 的方式,这就是搞砸了。

标签: android android-edittext android-textinputedittext


【解决方案1】:

您正在为 userCity 分配 onItemSelected 内的 EditText 的值。所以如果用户选择Other City,EditText的值在监听器中分配给userCity,而不是EditText的值。

只需分配微调器值并使用 if 条件设置 EditText 的可见性。

userCity = String.valueOf(parent.getItemAtPosition(position));

当你按下按钮时应该可以正常工作。

【讨论】:

  • onItemSelected中进行以下更改删除此行userCity = regUserOtherCity.getText().toString();userCity = String.valueOf(parent.getItemAtPosition(position));将此行移出if条件
  • 默认情况下,微调器值为“其他城市”。如果用户选择其他城市,则会显示一个 textInput 并且 regUserOtherCity 应该获取用户输入的值。这是用户输入值不会出现的地方。
  • 当你执行它时,它会进入这个条件else if (userCity.equals(cities[0]))吗?
  • 不,因为我发现 userCity 是空的。
  • 您能否按照我的建议进行更改并告诉我是否可行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2021-03-16
相关资源
最近更新 更多