【问题标题】:What is the default value of android:text of EditText while the android:text is left undefined?EditText 的 android:text 的默认值是什么,而 android:text 未定义?
【发布时间】:2012-12-10 01:03:21
【问题描述】:

我是 Android 开发的初学者。在我的项目中,我创建了一个 TableLayout——我认为 GridLayout 可以提供更多帮助,但由于我不熟悉 GridLayout,因此使用了 TableLayout——使用一些 EditTexts 从用户那里获取值。该活动实际上是一个可提交的表单。在每个 EditText 的左侧,有一个 TextView 定义了相应 EditText 的预期内容,因此我不必也没有为 EditText 设置默认文本(通常用作提示)。此活动中还有一个用于提交此表单的按钮。我选择了一些 EditTexts 作为 MUST_FILLEDs,所以在按钮的自定义侦听器类中,我必须检查这些 MUST_FILLEDs 是否已被填充。遵循我编码如下的直觉:

String s4 = machine_id.getText().toString().trim();
if(s4 == null || s4 == ""){
    Toast.makeText(v.getContext(), 
            "Please Input the machine ID", Toast.LENGTH_SHORT).show();
}

machine_id 这里是 android:id 用于 EditText。此代码最终没有显示吐司。所以我认为 EditText 有一个默认的文本值,即使 android:text 没有手动定义。然后我写了一个简单的项目来证实我的想法。这是 MainActivity.java

public class EditText_testActivity extends Activity implements View.OnClickListener{
/** Called when the activity is first created. */
private String text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText et = (EditText)findViewById(R.id.et01);
        text = et.getText().toString();

        Button btn = (Button)findViewById(R.id.btn01);
        btn.setOnClickListener(this);
    }

@Override
public void onClick(View v) {
    if(text != null)
        Toast.makeText(v.getContext(), text, Toast.LENGTH_SHORT).show();
    else
        Toast.makeText(v.getContext(), "null", Toast.LENGTH_SHORT).show();

}
}

还有main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et01" />
    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:id="@+id/btn01"
        android:text="TouchMe"/>

</LinearLayout>

它确实证明了 EditText 有一个默认文本值,因为Toast.makeText(v.getContext(), text, Toast.LENGTH_SHORT).show(); 确实显示了一个 toast。但是,它显示的东西看起来像一个空白,但不完全是。

最后,我想知道 EditText 中 android:text 的默认值是什么。

提前致谢。

【问题讨论】:

    标签: android layout user-interface android-edittext


    【解决方案1】:

    我相信默认值是一个空字符串。它永远不会为 null,因为如果是这种情况,您应该已经在这一行遇到了 NullPointerException:

    String s4 = machine_id.getText().toString().trim();
    

    查看您的代码,toast 没有出现的原因是因为您使用(s4 == null || s4 == "") 作为您的 if 条件。 == 运算符不同于 .equals()。 请尝试将您的条件改为"".equals(s4)

    【讨论】:

      【解决方案2】:

      EditText 没有默认值,您面临的问题是由于 String 的不正确匹配,因为 String 是对象所以

      s4 == "";
      

      就像匹配他们的对象引用而不是字符串,所以你应该使用

      s4.equals("");
      

      而不是上面。

      【讨论】:

      • 如果它真的有帮助,那么考虑通过点击投票计数下方的勾号来接受答案...:)
      • 我给了另一个答案,因为他提供了更多信息,例如 NullPointerException 事情确实启发了我。希望你不介意:)
      【解决方案3】:

      似乎默认值是一个空字符串:"" 这在我的程序中对我有用。

      【讨论】:

      • 您看到答案旁边有绿色对勾吗?这就是已经解决了问题的答案。
      【解决方案4】:

      在做之前使用空检查器

      machine_id.getText().toString().trim();
      

      也可以使用

      s4.isEmpty();
      

      (在某些 android 版本上)或

      s4.length()==0;
      

      方法。

      不要将 == 用于 String,因为它会检查参考而不是实际值

      【讨论】:

        【解决方案5】:

        比较字符串的正确方法是用,

        s1.equals(s2)
        

        这样使用

        if(s4.equals(null)||s4.equals("")){
            Toast.makeText(v.getContext(), 
                    "Please Input the machine ID", Toast.LENGTH_SHORT).show();
        }
        

        【讨论】:

        • 谢谢。我确实忘记了一些基本概念。如果我的老师知道这一点,他会收回我的学位>.
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 2013-08-03
        • 1970-01-01
        相关资源
        最近更新 更多