使用微调器转换器

时间:2016-02-29 15:32:48

标签: java android spinner converter

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

  1. EditText - 用户放置值f.e. 40
  2. 两个Spinners - 首先设置启动单位,第二个设置目标单位f.e.第一[cm]秒[米]
  3. 带结果的TextView
  4. 计算按钮
  5. 我用计算值做了函数,问题是如何选择单位 这是我的代码,它没有工作

    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
    

    我想这样做是可怕的,但是我没有进步,我愿意接受建议

1 个答案:

答案 0 :(得分:0)

您应该删除所有OnItemselectedListener,并且只为您的按钮使用一个OnClickListener。然后使用getSelectedItemPosition。

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;
            ....
           }
    }
});