【问题标题】:Save Radio button value "int" in to shared preferences将单选按钮值“int”保存到共享首选项
【发布时间】:2012-11-14 04:41:23
【问题描述】:

我仍然有这个单选按钮的问题:(。我仍在尝试创建一个设置页面,允许用户选择他们的文本颜色,一旦他们从这个设置活动和所有其他活动中选择了听共享首选项也变了。

我知道如何保存文本并从活动之间的共享偏好中获取文本但是 int ?因为我需要单选检查值,并且此方法将传递给其他活动以设置这些文本视图颜色。

谁能帮我检查一下代码吗?

我对 android 和一般编程非常陌生。

public class Text_Colour extends Activity implements OnSharedPreferenceChangeListener {

    RadioButton rb1, rb2, rb3, rb4, rb5;
    TextView tv1, tv2;
    RadioGroup rg1;
    Button bt1;
    String red, yellow, green, blue;

    public static final String PREFS_NAME = "MyPrefsFile"; 


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.colours);

        loadPreferences();

        tv1 = (TextView)findViewById(R.id.textview1);
        tv2 = (TextView)findViewById(R.id.textview2);
        bt1 = (Button) findViewById(R.id.button1);
        rb1 = (RadioButton) findViewById(R.id.radioButton1);
        rb2 = (RadioButton) findViewById(R.id.radioButton2);
        rb3 = (RadioButton) findViewById(R.id.radioButton3);
        rb4 = (RadioButton) findViewById(R.id.radioButton4);
        rb5 = (RadioButton) findViewById(R.id.radioButton5);
        rg1 = (RadioGroup) findViewById(R.id.radiogroup1);

        bt1.setOnClickListener(Colour_change_b);

        //tv1.setOnSharedPreferenceChangeListener(this);

    }

    View.OnClickListener Colour_change_b = new View.OnClickListener() {

    public void onClick(View v) {

        if(v == bt1) {

             if (rb1.isChecked()== true) {
                 tv2.setTextColor(Color.RED);

                } 
                if (rb2.isChecked() == true) {
                    tv2.setTextColor(Color.YELLOW);

                } 
                if (rb3.isChecked() == true) {
                    tv2.setTextColor(Color.GREEN);

                } 
                if (rb4.isChecked() == true) {
                    tv2.setTextColor(Color.BLUE);

                } 
                if (rb5.isChecked() == true) {
                    rb5.getId();
                    tv2.setTextColor(Color.BLACK);

                } 
                else { 
                }
                SharedPreferences settings1 = getSharedPreferences(PREFS_NAME, 0);
                SharedPreferences.Editor editor = settings1.edit();
                editor.putInt("colour", rb1.getId());
                editor.commit();
                finish();   
    }
    }
    };
    private void loadPreferences() {
        // TODO Auto-generated method stub
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        tv1.setTextColor(settings.getId("colour", ""));
        settings.registerOnSharedPreferenceChangeListener(Text_Colour.this);
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {

        loadPreferences();
    }   
    }

非常感谢你们的时间。

【问题讨论】:

  • 你希望editor.putInt("colour", rb1.getId()); 做什么?
  • ermmmmm 我对此很陌生,但我的逻辑告诉我获取 int 然后将其放入“color”中,不太确定为什么我在那里得到 rb1.getId() ......如果我使用rb1.getText().toString() editor.putInt 会变成无法解析。
  • rb1 是第一个单选按钮。它不包含其他任何内容,因此无法帮助您了解选择了哪个项目。
  • 你是对的,它应该是 radigroups。谢谢,我会看的。

标签: android android-intent radio-button sharedpreferences radio-group


【解决方案1】:

使用您的RadioGroup。您可以使用setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listener) 即时接收新颜色的值,您可以使用getCheckedRadioButtonId() 获取选中的radioButtonId。

但是,有一个问题。 Id 由 android 在编译时生成。不能保证在编译之间保持一致。如果要获取 RadioGroup 中 RadioButton 的索引,请使用 indexOfChild(View child)

要获取值,您需要一个 getInt(),然后是 getChildAt(int index),然后是 getId()check(int id)

【讨论】:

  • +1 表示indexOfChild(View child)。使用 "getInt(),然后是 getChildAt(int index),然后是 getId()"的示例可能会更好!
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 2015-08-18
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
相关资源
最近更新 更多