2016-08-15 51 views
0

在我的Android應用程序中,它需要在用戶更改無線電組選擇前發出通知(警告)消息。Android RadioButton確認選擇

基本上,我試圖給出一個對話框消息(有警告消息和是/否按鈕來確認更改)當用戶單擊任何其他單選按鈕內的廣播groiup。 如果用戶按下是,則更改用戶想要更改的選擇按鈕選擇,否則(如果按否)選擇之前選擇的內容。

我聽到OnCheckedChangeListener時,在onCheckedChanged方法中看不到任何選項。什麼是最好的方式來做到這一點。感謝

編輯

onCheckedChanged方法中提供從對話框警告消息與選項來確認的變化(隨YES/NO按鈕)。問題是當用戶在看到警告後不需要新選擇時,我需要一種方法來知道預先選擇的單選按鈕以恢復用戶的新選擇。

public void onCheckedChanged(RadioGroup group, int checkedId) 

上述方法提供了「checkedId」,但是如何知道哪個單選按鈕之前選擇了。用戶想要取消更改時需要此項。

可以通過跟蹤定義類級別變量的ealier選擇來保存舊的單選按鈕ID或其他類似的邏輯。但是Radio組中應該有一個簡單的方法來取消新的選擇(通過選擇舊的選擇)。我找了beforeRadioCheckChange式監聽器,但沒能找到

+2

在'onCheckedChange'中創建並顯示一個對話框,並根據他們所按的內容,讓支票通過或取消選中它。這是很不清楚你到底在幹什麼。 – codeMagic

+0

是的,看起來很容易做到這個cM; – Eenvincible

+0

感謝codeMagic和Eenvincible。我已經在「onCheckedChanged」方法中嘗試了同樣的事情。也就是,用YES/NO按鈕加載帶有警告消息的對話框以確認或取消單選按鈕選擇更改。但問題是當用戶按下NO我只想選擇以前選擇的單選按鈕。基本上尋找一種方法來取消新的選擇並選擇先前選定的單選按鈕。可以通過定義一個類級變量來保存舊的選擇和類似的邏輯。但不知道是否有一種簡單的方法來取消新的選擇並選擇舊的選擇。謝謝 – JibW

回答

0

你可以存儲之前選擇按鈕(實際上當你設置這一個單選按鈕,首先應該檢查):

int selectedButton = mRadioGroup.getCheckedRadioButtonId(); 

而且裏面更新onCheckedChanged回調:

selectedButton = group.getCheckedRadioButtonId(); 

當用戶確認更改時。否則,將選中狀態返回到上一個選中的按鈕。

0

沒有在RadioGroup的方法,使您能夠恢復你的行動,但是你可以很容易地通過控股選擇RadioButton的ID在外部變量實現這一點,並用它來恢復您的更改回:

RadioGroup radio; 
static int buttonChecked; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    radio = (RadioGroup) findViewById(R.id.radioGroup); 
    buttonChecked = radio.getCheckedRadioButtonId(); // be sure to get the checked button id first time before assigning the onCheckedChange 
    radio.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      // Raise Dialog 
      if(yes){ // User confirmeed 
       buttonChecked = checkedId; 
      }else{ // User refused 
       if(buttonChecked != -1) // to prevent app from crashing if nothing is already selected 
        radio.check(buttonChecked); 
       else 
        radio.clearCheck(); 
      } 
     } 
    }); 
}