1

我仍然有這個單選按鈕的問題:(。我仍然試圖創建一個設置頁面,允許用戶選擇他們的文字顏色,並且一旦他們從此選擇設置活動和所有其他活動與聽共享首選更改以及將單選按鈕值「int」保存到共享首選項

我知道如何保存文本並從活動之間的共享首選項獲取文本,但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(); 
    } 
    } 

非常感謝您的時間傢伙。

+1

你期望'editor.putInt(「color」,rb1.getId());'做什麼? – njzk2

+0

ermmmmm即時通訊相當新,但我的邏輯告訴我,得到int然後把它放到「顏色」,不太確定爲什麼我有rb1.getId()那裏...如果我使用rb1.getText()。toString ()editor.putInt將變爲無法解析。 – Ket

+0

rb1是第一個單選按鈕。它沒有包含任何關於其他的內容,因此無法幫助您瞭解選擇哪個項目。 – njzk2

回答

3

使用您的RadioGroup。您可以使用setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listener)立即接收新顏色的值,並且您可以使用getCheckedRadioButtonId()來獲取選中的radioButtonId。

但是,有一個問題。 Id由android在編譯時生成。不保證在編譯之間保持一致。如果您想要獲取RadioGroup中RadioButton的索引,請使用indexOfChild(View child)

要獲得的價值,你需要一個getInt(),然後getChildAt(int index),然後getId()check(int id)

+0

對於'indexOfChild(View child)'+1。使用*「'getInt()',然後是'getChildAt(int index)',然後是'getId()'*」的例子可能會更好。 – doplumi