我是android新手可以任何人帮我解决这个简单的问题,但是我无法识别这个执行过程。我需要通过Spinner动态获取结果但是这里spinner只在运行时执行(没有点击微调) 很抱歉问这个问题我无法解决这个问题...... :(
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.loanpayment);
try {
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
ans = (TextView) findViewById(R.id.editText1);
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
s = (Spinner) findViewById(R.id.spin);
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
ArrayAdapter<String> a = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, values);
a.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(a);
s.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String item = parent.getItemAtPosition(position).toString();
if(item.equals("Yearly")) {
Pattern p = Pattern.compile("([0-9 .]*)");
if (et1.getText().toString().trim().length() > 0 && et2.getText().toString().trim().length() > 0 && et3.getText().toString().trim().length() > 0) {
Matcher m = p.matcher(et1.getText().toString().trim());
Matcher m1 = p.matcher(et2.getText().toString().trim());
Matcher m2 = p.matcher(et3.getText().toString().trim());
if (m.matches() && m1.matches() && m2.matches()) {
amount = Float.valueOf(et1.getText().toString());
interest = Float.valueOf(et2.getText().toString());
year = Float.valueOf(et3.getText().toString());
s1 = interest/100;
s2 = year;
ans1 = s1 * amount;
ans2 = (float) (1-Math.pow((1+s1), -s2));
tot = (float) Math.round(ans1/ans2);
String an = Float.toString(tot);
ans.setText("Amount to Pay=" +an);
}
else {
Toast.makeText(getApplicationContext(),
"Incorrect value", Toast.LENGTH_SHORT)
.show();
}
答案 0 :(得分:0)
如果我理解正确,This SO Answer应解决您的问题
正如@Sam在评论中指出的那样
......旋转器调用onItemSelected()时 他们加载默认值。
所以,我的理解是onItemSelected()
将在加载Spinner
时被调用,因此您需要使用一些标志让函数知道它最初被加载并跳过逻辑。然后,您可以更改标志,以便在用户选择项目后,该功能将继续使用逻辑。希望这会有所帮助。
注意强>
我还没有在文档中找到任何有关此问题的内容,但我已逐步完成此功能以验证是否会发生这种情况。
答案 1 :(得分:0)
只要设置了spinner.setOnItemClickListener,只要布局布局就会调用一次,你必须手动设置一些标志