【问题标题】:I want to keep updating the information in an app我想不断更新应用程序中的信息
【发布时间】:2017-01-01 08:37:13
【问题描述】:

基本上,我有一个由片段组成的导航栏活动,并且我正在制作一个单位转换器。我已经清楚了如何做到这一点的概念,只有一个简单的问题。由于我使用的是单选按钮,因此每次更改要转换为相同单位转换的值时,我都需要单击不同的单选按钮,然后单击返回相同的单选按钮

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 克到公斤,我需要点击克,然后在第二个无线电组中回到公斤

【问题讨论】:

    标签: android android-studio


    【解决方案1】:

    发生这种情况是因为您通过仅侦听单选按钮的 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;
    
    
                }
    
            }
        }
    
    }
    

    【讨论】:

    • 我确实使用了 TextChangeListener 和 TextWatcher,并将检查单选按钮的部分添加到 onTextChanged 中,但我有同样的问题,我可以尝试其他任何事情@Kartik Sharma
    • @Taha 我添加了一些代码,可以帮助您理解解决方案的模式。
    • 谢谢,我看看能不能用你提供的@Kartik Sharma 样例来解决问题
    猜你喜欢
    • 2012-07-02
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    相关资源
    最近更新 更多