2017-01-01 36 views
-2

基本上,我有一個由碎片組成的導航欄活動,並且我正在製作單位轉換器。我已經清楚瞭如何做到的概念,只是有一個簡單的問題。由於我使用的單選按鈕,每次我改變值時轉換爲同一單位換算,我需要點擊不同的單選按鈕,然後單擊回到同一單選我想不斷更新應用程序中的信息

final RadioGroup radioGroup = (RadioGroup) myView.findViewById(R.id.radio); 
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, final int checkedId) { 
      // checkedId is the RadioButton selected 
      switch (checkedId) { 
       case R.id.radioGram: 
        final TextView textView = (TextView) myView.findViewById(R.id.EditTextFrom); 
        textView.setText("Gram"); 

        final RadioGroup radioGroup = (RadioGroup) myView.findViewById(R.id.radio2); 
        radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
         @Override 
         public void onCheckedChanged(RadioGroup radioGroup, int checkedId2) { 
          switch (checkedId2) { 
           case R.id.radioGram2: 
            TextView textView = (TextView) myView.findViewById(R.id.EditTextTo); 
            textView.setText("Gram"); 

            EditText calc = (EditText) myView.findViewById(R.id.From); 
            String gramholder = calc.getText().toString(); 
            gram = Integer.parseInt(gramholder) * 1; 

            EditText editText = (EditText) myView.findViewById(R.id.To); 
            editText.setText(String.valueOf(gram)); 
            break; 

           case R.id.radioKilogram2: 
            TextView textView2 = (TextView) myView.findViewById(R.id.EditTextTo); 
            textView2.setText("Kilogram"); 

            EditText calc2 = (EditText) myView.findViewById(R.id.From); 
            String gramholder2 = calc2.getText().toString(); 
            gram2 = Integer.parseInt(gramholder2) * 0.001; 

            EditText editText2 = (EditText) myView.findViewById(R.id.To); 
            editText2.setText(String.valueOf(gram2)); 
            break; 


          } 

         } 


        }); 

因此,舉例來說,如果我想將500克轉換爲公斤,我只需點擊第一個radiogroup中的radiobuttons gram和第二個radiogroup中的kg(公斤),但如果我想將520克轉換爲公斤,我需要點擊克,然後在第二個radiogroup中回到千克

回答

0

發生這種情況是因爲您僅通過僅偵聽單選按鈕的CheckedChangeListener來更改editText的值。

您只需在您的editText中添加TextChangeListener並使用TextWatcher來偵聽更改。

然後,你將不需要再次單擊單選按鈕。

編輯:寫了這段代碼。沒有測試,但可能足以理解解決方案。

import android.app.Activity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.RadioGroup; 
import android.widget.TextView; 

/** 
* Created by Kartik Sharma on 01/01/17. 
*/ 
public class Stack extends Activity implements RadioGroup.OnCheckedChangeListener{ 

    EditText editText_From, editText_To; 
    RadioGroup radioGroup_From, radioGroup_To; 
    View myView; 
    private final String GRAM = "GRAM", KILOGRAM = "KILOGRAM"; 
    String currentSelectedFrom = GRAM, currentSelectedTo = GRAM; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     myView = findViewById(R.id.fragment); 

     editText_From = (EditText) myView.findViewById(R.id.From); 
     editText_To = (EditText) myView.findViewById(R.id.To); 


     radioGroup_From = (RadioGroup) findViewById(R.id.radio); 
     radioGroup_To = (RadioGroup) myView.findViewById(R.id.radio2); 

     editText_From.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) { 
       if(currentSelectedTo == KILOGRAM){ 
        double gram2 = Integer.parseInt(s.toString()) * 0.001; 

        editText_To.setText(String.valueOf(gram2)); 
       }else if(currentSelectedTo == GRAM){ 
        double gram = Integer.parseInt(s.toString()) * 1; 

        editText_To.setText(String.valueOf(gram)); 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 
     //SIMILARLY FOR EDITTEXT_TO IF REVERSE CALCULATION IS NEEDED 
     radioGroup_From.setOnCheckedChangeListener(this); 
     radioGroup_To.setOnCheckedChangeListener(this); 


    } 

    @Override 
    public void onCheckedChanged(RadioGroup group, int checkedId) { 
     if(group == radioGroup_From){ 
      switch(checkedId){ 
       case R.id.radioGram : 
        //PERSON SELECTED GRAM IN FROM SECTION 

        final TextView textView = (TextView) myView.findViewById(R.id.EditTextFrom); 
        textView.setText("Gram"); 

        currentSelectedFrom = GRAM; 
        break; 
      } 
     }else if(group == radioGroup_To){ 
      switch (checkedId) { 
       case R.id.radioGram2: 
        //PERSON SELECTED GRAM IN TO SECTION 
        TextView textView = (TextView) myView.findViewById(R.id.EditTextTo); 
        textView.setText("Gram"); 

        String gramholder = editText_From.getText().toString(); 
        double gram = Integer.parseInt(gramholder) * 1; 

        editText_To.setText(String.valueOf(gram)); 

        currentSelectedTo = GRAM; 
        break; 

       case R.id.radioKilogram2: 
        //PERSON SELECTED KILOGRAM IN TO SECTION 

        TextView textView2 = (TextView) myView.findViewById(R.id.EditTextTo); 
        textView2.setText("Kilogram"); 

        String gramholder2 = editText_From.getText().toString(); 
        double gram2 = Integer.parseInt(gramholder2) * 0.001; 

        editText_To.setText(String.valueOf(gram2)); 

        currentSelectedTo = KILOGRAM; 
        break; 


      } 

     } 
    } 

} 
+0

我沒有使用TextChangeListener和TextWatcher,並補充,它檢查的單選按鈕進入onTextChanged的一部分,但我有同樣的問題,別的我可以嘗試@Kartik夏爾馬 – Taha

+0

@Taha我加入了一些代碼,這可以幫助您理解解決方案的模式。 –

+0

謝謝,我會看看如果我可以用你提供的樣本來處理一些事情@Kartik Sharma – Taha

相關問題