Как использовать пользовательский ввод EditText, значения кнопок увеличения и уменьшения в Android

Я новичок в андроиде. Итак, я пытаюсь рассчитать цену чего-либо, используя EditText вместо ListView, и у меня есть кнопки увеличения и уменьшения, чтобы увеличить значение компонента EditText.

Так что кнопки увеличения и уменьшения работают нормально. Они уменьшают и увеличивают значение в EditText и прекрасно рассчитывают цену, но когда я набираю EditText вместо использования кнопок, введенное значение не используется.

Вот мой код.

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/latte" />

    <TextView
        android:id="@+id/quantitytxt_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Quantity ( Cup(s) )"
        android:textAllCaps="true"
        android:textColor="@android:color/white"
        android:textSize="16sp" />

    <Button
        android:id="@+id/decrementButton"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/quantitytxt_textview"
        android:onClick="decrement"
        android:text="-"
        android:textSize="15sp" />

    <EditText
        android:id="@+id/quantity_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/quantitytxt_textview"
        android:layout_toRightOf="@id/decrementButton"
        android:padding="10dp"
        android:inputType="text"
        android:text="0"
        android:textColor="@android:color/white"
        android:textSize="16sp" />

    <Button
        android:id="@+id/incrementButton"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/quantitytxt_textview"
        android:layout_toRightOf="@id/quantity_textview"
        android:onClick="increment"
        android:text="+"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/pricetxt_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/quantity_textview"
        android:padding="10dp"
        android:text="Price (1 Cup = KES 5)"
        android:textAllCaps="true"
        android:textColor="@android:color/white"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/price_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/pricetxt_textview"
        android:padding="10dp"
        android:text="KES 0"
        android:textColor="@android:color/white"
        android:textSize="16sp" />


    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/price_textview"
        android:onClick="submitOrder"
        android:text="Order"
        android:textSize="15sp" />

</RelativeLayout>

Джава

package com.teqqli.justjava;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.text.NumberFormat;


/**
 * This app displays an order form to order coffee.
 */
public class MainActivity extends AppCompatActivity {

    int quantity = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * This method is called when the order button is clicked.
     */
    public void submitOrder(View view) {
        int price = quantity*5;
        displayPrice(price);
    }

    public void increment (View view) {
        quantity = quantity + 1;
        display(quantity);
    }

    public void decrement (View view) {
        if (quantity>0){
            quantity = quantity - 1;
            display(quantity);
        }
    }

    /**
     * This method displays the given quantity value on the screen.
     */
    private void display(int number) {
        EditText quantityText = (EditText) findViewById(R.id.quantity_textview);
        quantityText.setText("" + number);
    }

    /**
     * This method displays the given price on the screen.
     */
    private void displayPrice(int number) {
        TextView priceTextView = (TextView) findViewById(R.id.price_textview);
//        priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
        priceTextView.setText("KES " + number);
    }
}

Пожалуйста, кто-нибудь может мне помочь?


person Philip Kimathi    schedule 12.07.2018    source источник
comment
значение не используется, потому что вы постоянно читаете переменную number. У вас есть два варианта: сохранить текст из вашего EditText в переменную чисел всякий раз, когда пользователь изменяет его, или удалить переменную numbers и увеличить уже отображаемое число. поэтому int number = Integer.parseInt(quantityText.getText().toString(); Теперь переменную number нужно увеличить и снова установить в тексте редактирования   -  person Zun    schedule 12.07.2018
comment
при нажатии кнопки обновить quantityText.setTest(quantityText.getText().toString());   -  person Rakesh R    schedule 12.07.2018
comment
Возможный дубликат Получить значение поля редактирования текста   -  person InsaneCat    schedule 12.07.2018


Ответы (5)


Используйте функцию quantityText.getText(), чтобы получить значение и сохранить его в переменной, а затем выполнить операцию увеличения и уменьшения этого значения.

Что-то вроде этого:

int value = Integer.parseInt(quantityText.getText().toString().trim());

а затем передайте это value своим функциям увеличения и уменьшения.

person Einzig7    schedule 12.07.2018
comment
Работал! Но зачем использовать метод обрезки? - person Philip Kimathi; 12.07.2018
comment
Просто чтобы сократить любые нежелательные пробелы, которые пользователь может ввести по ошибке. Пожалуйста, отметьте ответ правильно, чтобы он мог помочь другим :) - person Einzig7; 12.07.2018

Пытаться:

public class MainActivity extends AppCompatActivity {

    EditText quantityText;
    int quantity = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        quantityText= (EditText) findViewById(R.id.quantity_textview);
    }

    /**
     * This method is called when the order button is clicked.
     */
    public void submitOrder(View view) {
        quantity = Integer.parseInt(quantityText.getText().toString());
        int price = quantity*5;
        displayPrice(price);
    }

    public void increment (View view) {
        quantity = quantity + 1;
        display(quantity);
    }

    public void decrement (View view) {
        if (quantity>0){
            quantity = quantity - 1;
            display(quantity);
        }
    }

    /**
     * This method displays the given quantity value on the screen.
     */
    private void display(int number) {
        quantityText.setText("" + number);
    }

    /**
     * This method displays the given price on the screen.
     */
    private void displayPrice(int number) {
        TextView priceTextView = (TextView) findViewById(R.id.price_textview);
        priceTextView.setText("KES " + number);
    }
}
person Nabil    schedule 12.07.2018

это просто, для создания события onclick:

final EditText input = (EditText) findViewById(R.id.textview_id);
final TextView view = (TextView) findViewById(R.id.textview_id);
final Button button = findViewById(R.id.button_id);
     button.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             view.setText(input.getText().toString());
         }
     });
person Yuval Keysar    schedule 12.07.2018

Причина, по которой ваш EditText не используется, заключается в том, что вы не получаете значение из EditText. Так что получите это значение как;

String valueFromEditText=quantityText.getText().toString(); // Getting string value from EditText

int valueFromEditTextInIntegerFormat=Integer.parseInt(valueFromEditText) // Converting string value received into integer format

Теперь используйте это целочисленное значение для выполнения любых операций, которые вы хотите.

Удачи :)

person Siddharth Bhatheja    schedule 12.07.2018
comment
Спасибо теперь понял. - person Philip Kimathi; 12.07.2018

Используйте 1_

person faran.javed    schedule 12.07.2018