我感谢任何帮助和指导。我正在学习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");
}
}
});
}
任何方向都会非常感谢。谢谢。
答案 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));
}
}
}