使用微调器转换

using spinner to converter

我正在创建转换器(距离)4 Android。我的想法是这样做:

  1. EditText - 用户输入值 f.e。 40
  2. 两个微调器 - 第一个设置启动单元,第二个设置目标单元 f.e。第一[厘米]第二[米]
  3. 带结果的 TextView
  4. 计算按钮

我做了计算值的函数,问题是如何选择单位 这是我的代码,但没有用

spinnerP = (Spinner) findViewById(R.id.spinnerPocz);
    ArrayAdapter<CharSequence> adapterP = ArrayAdapter.createFromResource(this, R.array.odlegloscArray, R.layout.support_simple_spinner_dropdown_item);
    adapterP.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
    spinnerP.setAdapter(adapterP);

    spinnerP.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            //Toast.makeText(getBaseContext(), parent.getItemIdAtPosition(position) + " selected", Toast.LENGTH_LONG).show();
        }

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

        }
    });

    spinnerD = (Spinner) findViewById(R.id.spinnerDoc);
    ArrayAdapter<CharSequence> adapterD = ArrayAdapter.createFromResource(this, R.array.odlegloscArray, R.layout.support_simple_spinner_dropdown_item);
    adapterD.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
    spinnerD.setAdapter(adapterD);

    spinnerD.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (spinnerP.getItemAtPosition(position) == 0) {
                switch (position) {
                    case 0:
                        Toast.makeText(getApplicationContext(), "zmień wartość docelową", Toast.LENGTH_SHORT).show(); //units the same
                        break;
                    case 1:
                        btnOblicz.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                metryNaKm(); //meters to km
                            }
                        });
                        break;
                    case 2:
                        btnOblicz.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                metryNaCm(); //meters to cm
                            }
                        });
                        break;
                    case 3:
                        btnOblicz.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                metryNaCale(); //meters to inch
                            }
                        });
                        break;
//etc.
//then there is
else if (spinnerP.getItemAtPosition(position) == 1) {
                switch (position) {
                    case 0:
                        btnOblicz.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                kilometryNaM(); //km to meters
//etc

我想这样做很糟糕,但我并不先进,我愿意接受建议

您应该做的是删除所有 OnItemselectedListener,并只为您的按钮使用一个 OnClickListener。然后使用getSelectedItem Position.

btnOblicz.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

          int selectedP = spinnerP.getSelectedItemPosition();
          int selectedD = spinnerD.getSelectedItemPosition();        

          switch(selectedP){
             case 0:
                  switch(selectedD){
                       case 1:
                            convertFrom0to1();
                            break;
                       case 2:
                            convertFrom0to2();
                       ....
                   }
                   break;
            ....
           }
    }
});