2017-01-01 1 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 그램을 킬로그램으로 변환하고 싶습니다. 라디오 버튼 그램 (첫 번째 방사선 그룹에서)과 킬로그램 (두 번째 방사선 그룹에서)을 클릭하면됩니다. 그런 다음 520 그램을 킬로그램으로 변환하려면 클릭해야합니다. 그 다음에 두 번째 방사선 그룹의 킬로그램으로 돌아갑니다

답변

0

라디오 버튼의 경우에만 CheckedChangeListener 만 수신하여 editText의 값을 변경하기 때문에 이러한 현상이 발생합니다.

변경 사항을 수신하려면 TextChangeListener을 editText에 추가하고 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

관련 문제