更改微调项时无法更改值

Unable to change values when change spinner item

我正在做的是制作一个单位转换器应用程序,虽然它 运行 很好但是当我将微调器项目从 INCHES 更改为 FOOT 值没有改变,但是当我从 EditText 框中添加或删除数字时,它会更新为脚参数值。

我想要的是当我在文本框中输入值时,它会根据 Spinner 中选择的项目更新值,例如:如果我写 23 并且 Spinner 项目是 INCHES 然后它根据英寸转换显示所有值,当我单击 Spinner 并将其更改为 FEET 它将根据英尺转换显示我的值但这在我的情况下没有发生这只发生在我 add/delete 文本框中的一些数字它更新为 FEET .

这是Length.java文件

package com.example.farrukh.convertmee;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class Length extends Fragment implements AdapterView.OnItemSelectedListener

{
    String[] Lunits = {"Inches", "Feet", "Yards", "Miles", "Km", "Meters" ,"Centimeters" };

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       // return inflater.inflate(R.layout.length_layout,null);


        final View myFragmentView = inflater.inflate(R.layout.length_layout, container, false); //get laength.xml
        final Spinner spin = (Spinner)myFragmentView.findViewById(R.id.spinner);
        final  TextView a=(TextView)myFragmentView.findViewById(R.id.textView9);
        final  TextView b=(TextView)myFragmentView.findViewById(R.id.textView10);
        final  TextView c=(TextView)myFragmentView.findViewById(R.id.textView11);
        final  TextView d=(TextView)myFragmentView.findViewById(R.id.textView12);
        final  TextView e=(TextView)myFragmentView.findViewById(R.id.textView13);
        final  TextView f=(TextView)myFragmentView.findViewById(R.id.textView14);
        final  TextView g=(TextView)myFragmentView.findViewById(R.id.textView15);

        final  EditText text =(EditText)myFragmentView.findViewById(R.id.editText);

        spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {


            public void onItemSelected(AdapterView<?> parent, View view, final int position, long id) {

                text.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {


                    }

                    @Override
                    public void afterTextChanged(Editable s)
                    {

                        double ans=0;
                        if( !s.toString().equals("") && s.toString().length() > 0 )
                        {

                            ans = Double.parseDouble(s.toString());
                        }

                        if(spin.getSelectedItem().equals("Inches"))
                        {
                            double inches = ( ans * 1 );
                            a.setText(" "+inches);

                            double feet = ( ans * 0.0833 );
                            b.setText(" "+feet);

                            double yards = ( ans * 0.02777778 );
                            c.setText(" " + yards);

                            double miles = ( ans * (1/63360) );
                            d.setText(" " + miles);

                            double kilometers = ( (ans/39370) );
                            e.setText(" " + kilometers);

                            double meters = ( ans * 0.0254 );
                            f.setText(" " + meters);

                            double centimeters = ( ans * 2.54 );
                            g.setText(" "+centimeters);
                        }

                        if (spin.getSelectedItem().equals("Feet"))
                        {
                            double inches = ( ans * 12 );
                            a.setText(" "+inches);

                            double feet = ( ans * 1 );
                            b.setText(" "+feet);

                            double yards = ( ans * 0.3333333 );
                            c.setText(" " + yards);

                            double miles = ( ans * (0.0001893939) );
                            d.setText(" " + miles);

                            double kilometers = ( ans * 0.0003048 );
                            e.setText(" " + kilometers);

                            double meters = ( ans * 0.3048 );
                            f.setText(" " + meters);

                            double centimeters = ( ans * 30.48 );
                            g.setText(" "+centimeters);
                        }

                    }


                });


            }


            public void onNothingSelected(AdapterView<?> parent) {

            }
        });




        ArrayAdapter aa = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,Lunits);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(aa);


        return myFragmentView;
    }


    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    }

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

    }
}

删除 text.addTextChangedListener(new TextWatcher() { 侦听器。每当您从微调器中选择不同的项目时,都会调用 onItemSelected,但是其中有一个 TextWatcher,只有当 EditText 中的文本发生变化时才会调用它。

如果您希望同时进行转换(微调项选择和文本更改),则将整个转换代码移动到一个单独的方法中,并从两个侦听器(OnItemSelectedListenerTextWatcher)中调用它但是 TextWatcher需要独立而不是在其他监听器中。

将您的 EditTextTextView 声明为 class 变量(不需要 final),并添加 TextWatcherSipnner 侦听器之外。

这是我的建议:

 public class Length extends Fragment implements AdapterView.OnItemSelectedListener

    {
        String[] Lunits = {"Inches", "Feet", "Yards", "Miles", "Km", "Meters" ,"Centimeters" };

        EditText mEditText;
        TextView a, b, c, d, e, f, g;
        String mSelectedUnit = "";

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           // return inflater.inflate(R.layout.length_layout,null);


            final View myFragmentView = inflater.inflate(R.layout.length_layout, container, false); //get laength.xml
            Spinner spin = (Spinner)myFragmentView.findViewById(R.id.spinner);
            a=(TextView)myFragmentView.findViewById(R.id.textView9);
            b=(TextView)myFragmentView.findViewById(R.id.textView10);
            c=(TextView)myFragmentView.findViewById(R.id.textView11);
            d=(TextView)myFragmentView.findViewById(R.id.textView12);
            e=(TextView)myFragmentView.findViewById(R.id.textView13);
            f=(TextView)myFragmentView.findViewById(R.id.textView14);
            g=(TextView)myFragmentView.findViewById(R.id.textView15);

            mEditText =(EditText)myFragmentView.findViewById(R.id.editText);


            ArrayAdapter aa = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,Lunits);
            aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spin.setAdapter(aa);
            spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {


                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                     mSelectedUnit = Lunits[position];
                     convertValue();

                }

                public void onNothingSelected(AdapterView<?> parent) {

                }
            });


           mEditText.addTextChangedListener(new TextWatcher() {

              @Override
              public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              }

              @Override
              public void onTextChanged(CharSequence s, int start, int before, int count) {
              }

              @Override
              public void afterTextChanged(Editable s)
              {
                 convertValue();
              }

          });

            return myFragmentView;
        }

        private void convertValue(){
           double ans=0;
           String s = mEditText.getText().toString(); 

           if( !s.toString().equals("") && s.length() > 0 )
           {
              ans = Double.parseDouble(s);
           }

           if(mSelectedUnit.equals("Inches"))
           {
              double inches = ( ans * 1 );
              a.setText(" "+inches);

              double feet = ( ans * 0.0833 );
              b.setText(" "+feet);

              double yards = ( ans * 0.02777778 );
              c.setText(" " + yards);

              double miles = ( ans * (1/63360) );
              d.setText(" " + miles);

              double kilometers = ( (ans/39370) );
              e.setText(" " + kilometers);

              double meters = ( ans * 0.0254 );
              f.setText(" " + meters);

              double centimeters = ( ans * 2.54 );
              g.setText(" "+centimeters);
           }

           if (mSelectedUnit.equals("Feet"))
           {
               double inches = ( ans * 12 );
               a.setText(" "+inches);

               double feet = ( ans * 1 );
               b.setText(" "+feet);

               double yards = ( ans * 0.3333333 );
               c.setText(" " + yards);

               double miles = ( ans * (0.0001893939) );
               d.setText(" " + miles);

               double kilometers = ( ans * 0.0003048 );
               e.setText(" " + kilometers);

               double meters = ( ans * 0.3048 );
               f.setText(" " + meters);

               double centimeters = ( ans * 30.48 );
               g.setText(" "+centimeters);
           }

         }
      }
    }