Android:用户输入和微调器获取输出值

时间:2018-06-07 16:49:49

标签: java android

我感谢任何帮助和指导。我正在学习Java并创建我的第一个Android应用程序。

布局(1)数字输入的文本视图(ID:inputValue) (2)微调器(ID:firstCity,secondCity) - 两个纺纱厂都有相同的5个城市 (1)按钮(ID:clickButton) (1)数字输出的文本视图(ID:outputValue)

功能: 1。用户在TextView widget1中输入数值。 没有条目的错误消息

2. 用户从微调器1中选择5个城市中的任何一个

3. 用户从微调器2中选择5个城市中的任意一个

4. 用户点击按钮

5. 在TextView widget2中弹出数字输出。

我坚持获得数字输出(5)。每个城市都有一个分配给它的数值,但我很难找到代表这个的最好方法。 HashMap的?字符串数组?开关? 这些城市位于下面的strings.xml中。它们各自的值为2,4,6,8,10。

目标是将此等式用于输出: widget1 inputValue x(spinner1 / spinner2)= widget2 outputValue

的strings.xml

<resources>
<string name="app_name">Cities</string>
<string-array name="cities_array">
    <item>Buffalo, NY</item>
    <item>Portland, OR</item>
    <item>Sacramento, CA</item>
    <item>Jackson, Wyoming</item>
    <item>Santa Fe, NM</item>
</string-array>

package;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.ArrayAdapter;

public class calculate extends AppCompatActivity {

Spinner spinnerA,spinnerB;
Button clickButton;
TextView outputValue;
TextView inputValue;
ArrayAdapter<CharSequence> adapter;


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

    final TextView inputValue = (TextView) findViewById(R.id.inputValue);

    outputValue = (TextView) findViewById(R.id.outputValue);
    Button ClickButton = (Button) findViewById(R.id.ClickButton);

    spinnerA = (Spinner)findViewById(R.id.firstCity); 
    spinnerB = (Spinner)findViewById(R.id.secondCity);

    adapter = ArrayAdapter.createFromResource(this,R.array.cities,
            android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinnerA.setAdapter(adapter);
    spinnerB.setAdapter(adapter);

    spinnerA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {


        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            //Toast.makeText(getBaseContext(),parent.getItemAtPosition(position)+ "selected",
                    Toast.LENGTH_LONG).show();

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    spinnerB.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

          //Toast.makeText(getBaseContext(),parent.getItemAtPosition(position)+ "selected",
                    Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    clickButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(inputValue.getText().length()<=0) {
                inputValue.setError("Must input value");
            }
        }
    });
   }

任何方向都会非常感谢。谢谢。

2 个答案:

答案 0 :(得分:0)

首先要做的事情是:您无法在TextView中输入输入,您需要使用EditText。插入用户输入的编辑文本,并实现其侦听器。您可以直接设置视图的引用,并为其添加onTextChangedListener()。这将显示您可以覆盖的三种方法,您可以为您的用例选择onTextChanged()方法。只需在此方法中实现您的逻辑,并通过textView.setText()调用修改textView内容,其中param将是您计算的输出。

以下链接应该有所帮助: Implementing Text Watcher for EditText

答案 1 :(得分:0)

由于您使用按钮生成输出,因此您需要的唯一侦听器是该按钮的onClickListener。此外,在运行应用程序时,您无法在TextView中键入值,因此请将输入更改为EditText。

EditText inputValue = (EditText) findViewById(R.id.inputValue);

为听众试试这个:

clickButton.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       // Just to make sure there is something in the input
       if(inputValue.getText() == null || inputValue.getText().length()<=0) {
           inputValue.setError("Must input value");
       } else {
            // Put in your formula

            // Get your values for your spinners using their index in the list
            // The index starts at zero, so adding one and
            // multiplying by 2 gives you your numbers
            int spinnerAValue = (spinnerA.getSelectedItemPosition()+1)*2;
            int spinnerBValue = (spinnerA.getSelectedItemPosition()+1)*2;

            // Convert the input to a number (use double if there are decimals)
            double input = Double.parseDouble(inputValue.getText());

            double result = input * (spinnerAValue/spinnerBValue);

            // Set the output TextView to the result, converting it to a string
            outputValue.setText(Double.toString(result));

        }
   }
}