#java #android #material-design
#java #Android #материал-дизайн
Вопрос:
Я пытаюсь получить некоторый пользовательский ввод, используя material design, например, информацию о росте, весе, возрасте и поле. Когда пользователь нажимает кнопку seeDietChart, система вычисляет и показывает bmi и bmr. Когда я даю ввод в TextInputLayout, приложение запускается, но не получает никакого значения, а поле остается пустым. Вот xml
файл
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/height"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:hint="Enter your height in meter"
>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/weight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:hint="Enter your weight in kg"
>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:hint="Enter your age"
>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:hint="Your gender"
>
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
</com.google.android.material.textfield.TextInputLayout>
После ввода переменная остается пустой. Я попытался распечатать полученное значение, используя Log.i и всплывающее сообщение. Сообщение о тосте пустое. Вот java
код
txtHeight = findViewById(R.id.height);
heightString = txtHeight.getEditText().getText().toString();
txtWeight = findViewById(R.id.weight);
weightString = txtWeight.getEditText().getText().toString();
txtAge = findViewById(R.id.age);
ageString = txtAge.getEditText().getText().toString();
txtGender = findViewById(R.id.gender);
gender = Objects.requireNonNull(txtGender.getEditText()).getText().toString();
Log.i("Height", heightString);
Log.i("Weight", weightString);
Log.i("Age", ageString);
Toast.makeText(getApplicationContext(), heightString, Toast.LENGTH_LONG).show();
Как я могу решить эту проблему?
Комментарии:
1. ваши идентификаторы просмотра
txtGender
txtHeight
и так далее. Вы не получаете NPE?2. Я получил сообщение об ошибке. Теперь я обновил идентификаторы представления.
3. Эй, вы должны установить идентификатор для TextInputEditText и использовать его, чтобы присвоить ему значение переменной в Java (findViewById). Это не имя переменной в java, которое имеет значение. Важно то, что идентификатор в xml используется в R.id.name_of_id.
4. Один TextInputLayout содержит один TextInputEditText . Я устанавливаю идентификатор для каждого TextInputLayout. Я только что обновил xml. Не могли бы вы проверить и сообщить мне, все ли в порядке?
5. @JahidHasan вместо этого попробуйте добавить идентификаторы
edittext
и использовать их напрямую?
Ответ №1:
Когда выполняется код, изначально текстовые поля пусты. Вот почему он не получает никакого значения. Чтобы получить значение, нам нужно использовать кнопку и использовать метод TextBox.getText() внутри кнопки. Это работает отлично.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String value = txtHeight.getText().toString();
}
});