我确定我缺少一些简单的东西,但是我的代码存在一些逻辑问题。我正在开发一个转换器应用程序。我将使用两个微调器来进行转换。例如英寸到英尺。在充实所有代码之前,我使用两种简单的方法进行测试。现在,如果我先在应用程序中选择SpinnerA的值,然后再选择SpinnerB的值,则不会计算。如果我先选择SpinnerB,然后选择SpinnerA,则可以使用。我想念什么?
spinnerA = (Spinner)getView().findViewById(R.id.spinnerA);
spinnerB = (Spinner)getView().findViewById(R.id.spinnerB);
adapterA = ArrayAdapter.createFromResource(getContext(),
R.array.conversions, android.R.layout.simple_spinner_item);
adapterA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapterB = ArrayAdapter.createFromResource(getContext(),
R.array.conversions, android.R.layout.simple_spinner_item);
adapterB.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerA.setAdapter(adapterA);
spinnerB.setAdapter(adapterB);
spinnerA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
tempA = parent.getItemAtPosition(position).toString();
if (tempA.equals("Inches") && tempB.equals("Centimeters")){
textView.setText(String.valueOf(halfMyNum(100)));
}
else if (tempA.equals("Centimeters")){
if (tempB.equals("Inches")){
textView.setText(String.valueOf(doubleMyNum(12)));
}
}
else{
textView.setText("Please select a valid option");
}
//Toast.makeText(getContext(), 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) {
tempB = parent.getItemAtPosition(position).toString();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
最佳答案
首先从spinnerA选择项目时,将初始化tempA,并调用spinnerA的项目侦听器,但tempB尚未初始化。
然后,当您从spinnerB中选择项目时,将初始化tempB并调用spinnerB的项目侦听器。在您的情况下,您仅在spinnerA的项目侦听器方法中调用了该方法,因此当您从spinnerB中选择项目时,实际上不会执行任何操作。一种可能的解决方案是也为spinnerB在项目侦听器中调用所需的方法。