Каково значение по умолчанию для android: текст EditText, в то время как для android: текст остается неопределенным?

1

Я новичок в разработке Android. В моем проекте я создал TableLayout --I, что GridLayout может больше помочь, но поскольку я не знаком с GridLayout, TableLayout был сделан - с некоторыми EditTexts, чтобы получать значения от пользователя. Фактически эта деятельность представляет собой передаваемую форму. Слева от каждого EditText есть TextView, определяющий, что ожидается от соответствующего EditText, поэтому мне не нужно и не устанавливать текст по умолчанию для EditText (который обычно используется как подсказка). Существует также кнопка в этой операции для отправки этой формы. Я выбрал несколько EditTexts как MUST_FILLED, поэтому в классе пользовательского прослушивателя кнопки я должен проверить, заполнены ли эти MUST_FILLED. следуйте интуиции, которую я закодировал следующим образом:

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 здесь isroid 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(); показывает тост. Однако он показывает что-то похожее на пустое пространство, но не совсем так.

Наконец, мне интересно, что такое значение по умолчанию для android: text в EditText.

Заранее спасибо.

Теги:
user-interface
android-edittext
layout

5 ответов

4
Лучший ответ

Я считаю, что значение по умолчанию - пустая строка. Он никогда не будет пустым, потому что если это произойдет, вы уже должны были встретить исключение NullPointerException в этой строке:

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

Глядя на ваш код, причина, по которой тост не появился, заключается в том, что вы использовали (s4 == null || s4 == "") качестве условия if. == оператор отличается от .equals(). Попробуйте изменить свое состояние на "".equals(s4).

  • 0
    вдохновиться. спасибо.
  • 0
    добро пожаловать
2

Кажется, по умолчанию пустая строка: "Это сработало для меня в моей программе.

  • 0
    Вы видите ответ с зеленой галочкой рядом с ним? Это ответ, который уже решил вопрос.
  • 0
    Хорошо, верно, вроде как новый для stackoverflow ... отметил :)
2

нет значения по умолчанию для EditText проблема, с которой вы сталкиваетесь, связана с неправильным совпадением String, поскольку String является объектом, поэтому

s4 == "";

похоже на сопоставление их объектных рефренсов, а не с String, поэтому вы должны использовать

s4.equals("");

вместо выше.

  • 0
    О, глупая ошибка. Большое спасибо!
  • 0
    если это действительно помогло, подумайте о принятии ответа, нажав на галочку под подсчетом голосов ... :)
Показать ещё 2 комментария
1

Используйте нулевой контролер перед выполнением

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

А также использовать

s4.isEmpty();

(на некоторых версиях Android) ИЛИ

s4.length()==0;

метод.

Не используйте == для String, поскольку он будет проверять ссылку, а не фактическое значение

  • 0
    Благодарю. помогает
0

Правильный способ сравнения строки - это,

s1.equals(s2)

Используйте его таким образом

if(s4.equals(null)||s4.equals("")){
    Toast.makeText(v.getContext(), 
            "Please Input the machine ID", Toast.LENGTH_SHORT).show();
}
  • 0
    Благодарю. я забыл некоторые основные понятия. мой учитель забрал бы мою степень, если бы знал это>. <

Ещё вопросы

Сообщество Overcoder
Наверх
Меню