当前位置: 首页 > 知识库问答 >
问题:

单击按钮时,RadioGroup中选定的RadioButton状态应使用片段保存在SharedPreferences中

爱乐邦
2023-03-14

包含RadioGroup的碎片活动,有5个RadioButton5和一个Button,RadioButton5有一个EditText。

public void onCreate(Bundle savedInstanceState) {

    radio1 = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("radio1", false);
    radio2 = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("radio2", false);
    radio3 = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("radio3", false);
    radio4 = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("radio4", false);
    radio5 = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("radio5", false);
    str_rbText = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("Selected_rb_msg", "nomi");
    msgToSend = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("msgToSend", "");
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    viewRoot =  inflater.inflate(R.layout.fragment_messages, container, false);

    radioGroup = (RadioGroup) viewRoot.findViewById(R.id.radio_grp);
    rb1 = (RadioButton) viewRoot.findViewById(R.id.rb_msg1);
    rb2 = (RadioButton) viewRoot.findViewById(R.id.rb_msg2);
    rb3 = (RadioButton) viewRoot.findViewById(R.id.rb_msg3);
    rb4 = (RadioButton) viewRoot.findViewById(R.id.rb_msg4);
    rb5 = (RadioButton) viewRoot.findViewById(R.id.rb_customMsg);
    editText = (EditText) viewRoot.findViewById(R.id.et_customMsg);

    if(radio1){
        rb1.setChecked(true);
    }
    else if(radio2){
        rb2.setChecked(true);
    }
    else if(radio3){
        rb3.setChecked(true);
    }
    else if(radio4){
        rb4.setChecked(true);
    }
    else if(radio5){
        rb5.setChecked(true);
        editText.setVisibility(View.VISIBLE);
        editText.setHint(PreferenceManager.getDefaultSharedPreferences(getActivity()).ge
tString("Selected_rb_msg", ""));
    }

    function();
    return viewRoot;
}
public void function(){

    SharedPreferences sp = 
PreferenceManager.getDefaultSharedPreferences(getActivity());
    final SharedPreferences.Editor editor = sp.edit();
    if(rb1.isChecked() && !rb5.isChecked() && !rb2.isChecked() && 
!rb3.isChecked() && !rb4.isChecked()){
        editText.setVisibility(View.INVISIBLE);
    }

radioGroup.setOnCheckedChangeListener(new 
RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if (checkedId == R.id.rb_msg1){
            str_rbText = rb1.getText().toString();
            editText.setVisibility(View.INVISIBLE);
            editText.setText("");
            //editor.putBoolean("radio1", true).apply();
        } else if (checkedId == R.id.rb_msg2){
            str_rbText = rb2.getText().toString();
            editText.setVisibility(View.INVISIBLE);
            editText.setText("");
            //editor.putBoolean("radio2", true).apply();
        } else if (checkedId == R.id.rb_msg3){
            str_rbText = rb3.getText().toString();
            editText.setVisibility(View.INVISIBLE);
            editText.setText("");
            //editor.putBoolean("radio3", true).apply();
        } else if (checkedId == R.id.rb_msg4){
            str_rbText = rb4.getText().toString();
            editText.setVisibility(View.INVISIBLE);
            editText.setText("");
            //editor.putBoolean("radio4", true).apply();
        } else if (checkedId == R.id.rb_customMsg){
                editText.setVisibility(View.VISIBLE);
                editText.setHint("Enter your custom message");
                str_rbText = editText.getEditableText().toString().trim();
        }
    });

onClicking button选定的单选按钮状态应保存在SharedPreferences中,并在启动活动时加载

Button btnSet = (Button) viewRoot.findViewById(R.id.btn_set_msgFrag);
    btnSet.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e("SelectedRadioButton",str_rbText);

            int id = radioGroup.getCheckedRadioButtonId();
            if(id == R.id.rb_msg1){
                editor.putBoolean("radio1", true).apply();
            }else if(id == R.id.rb_msg2){
                editor.putBoolean("radio2", true).apply();
            }else if(id == R.id.rb_msg3){
                editor.putBoolean("radio3", true).apply();
            }else if(id == R.id.rb_msg4){
                editor.putBoolean("radio4", true).apply();
            }else if(id == R.id.rb_customMsg){
                editor.putBoolean("radio5", true).apply();
            }
        }
    });
}
}

共有1个答案

郭元凯
2023-03-14

当将选定的radioButton的一个状态放入其他radioButton时,将false

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (checkedId == R.id.rb_msg1){
                str_rbText = rb1.getText().toString();
                editText.setVisibility(View.INVISIBLE);
                editText.setText("");
                editor.putBoolean("radio1", true).apply();
                editor.putBoolean("radio2", false).apply();
                editor.putBoolean("radio3", false).apply();
                editor.putBoolean("radio4", false).apply();
                editor.putBoolean("radio5", false).apply();
            } else if (checkedId == R.id.rb_msg2){
                str_rbText = rb2.getText().toString();
                editText.setVisibility(View.INVISIBLE);
                editText.setText("");
                editor.putBoolean("radio2", true).apply();
                editor.putBoolean("radio1", false).apply();
                editor.putBoolean("radio3", false).apply();
                editor.putBoolean("radio4", false).apply();
                editor.putBoolean("radio5", false).apply();
            } else if (checkedId == R.id.rb_msg3){
                str_rbText = rb3.getText().toString();
                editText.setVisibility(View.INVISIBLE);
                editText.setText("");
                editor.putBoolean("radio3", true).apply();
                editor.putBoolean("radio1", false).apply();
                editor.putBoolean("radio2", false).apply();
                editor.putBoolean("radio4", false).apply();
                editor.putBoolean("radio5", false).apply();
            } else if (checkedId == R.id.rb_msg4){
                str_rbText = rb4.getText().toString();
                editText.setVisibility(View.INVISIBLE);
                editText.setText("");
                editor.putBoolean("radio4", true).apply();
                editor.putBoolean("radio1", false).apply();
                editor.putBoolean("radio2", false).apply();
                editor.putBoolean("radio3", false).apply();
                editor.putBoolean("radio5", false).apply();
            } else if (checkedId == R.id.rb_customMsg){
                editText.setVisibility(View.VISIBLE);
                editText.setHint("Enter your custom message");
                //if(editText.length() == 0){
                //  Toast.makeText(getContext(), "VISIBLE", Toast.LENGTH_SHORT).show();
                //}
                str_rbText = editText.getEditableText().toString().trim();
                editor.putBoolean("radio5", true).apply();
                editor.putBoolean("radio1", false).apply();
                editor.putBoolean("radio2", false).apply();
                editor.putBoolean("radio3", false).apply();
                editor.putBoolean("radio4", false).apply();
                //editText.setBackgroundDrawable(null);  //to remove underline of EditText
            }
            editor.putString("msg2send", str_rbText).apply();
        }
    });
 类似资料:
  • 我想在下面的代码中通过SharedPreferences保存我的ToggleButton状态。请引导我。非常感谢。

  • 下面的代码是从test.jsp页面获取数据的联机测试。现在,当用户单击一个单选按钮并单击next时,它将存储该单选按钮的值,并显示该单选按钮的next值。在这里,单选按钮正常工作,但我不能存储每个单选按钮的值单击。 上面的代码将hidden字段的值传递给test.jsp,以便带来该值。

  • 我有4个按钮来替换活动中的片段[片段A,片段B,片段C,片段D],然后我将片段A替换为活动,然后我将片段A中的值更改为片段A,之后我将片段B替换为片段A,并将片段C替换为片段B.但是我想把片段A替换成片段C。如何在片段A中保存状态。 当我提交片段时编写代码 要替换的图表 片段A ------- 片段B ------- 片段C ------- PS.我不想使用返回按钮返回片段A,我想替换片段A并在第

  • 我使用这个代码来替换片段,但有一个问题,它不是替换旧片段,它只是覆盖旧片段,所以请告诉我这里有什么问题。

  • 我正在尝试学习如何在android中实现片段。因此,我在activity_main中创建了两个按钮和一个片段。xml。如果我点击第一个按钮,片段1应该充气,同样,如果我点击第二个按钮,片段2应该充气。 但是问题是它没有替换片段。当我调试代码时,在View.class中执行clecle()方法返回false。 LogCat中也没有错误。 我无法找出代码的问题。 这里是主要活动。xml 这是fragm

  • 我有一个HomeActivity,我从中调用片段列表。在HomeActivity中,我有一个侧菜单,其中加载了所有片段。 现在,在这个列表中,我有一个名为HomeFraank的片段,它使用webservice显示带有数据的Google地图。 我想要的是我想加载Map dat只加载一次(第一次)片段,而不是每次单击sidemenu或从任何其他片段进来时。 我的HomeFragment或任何其他片段会