我确定我缺少一些简单的东西,但是我的代码存在一些逻辑问题。我正在开发一个转换器应用程序。我将使用两个微调器来进行转换。例如英寸到英尺。在充实所有代码之前,我使用两种简单的方法进行测试。现在,如果我先在应用程序中选择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在项目侦听器中调用所需的方法。

09-10 13:07