2011-07-03 23 views
0

嗨處理事件有使用單選按鈕的應用如下代碼問題的上Android中單選按鈕編程

 default_mode =(RadioButton)findViewById(R.id.default_mode); 
     warn_mode =(RadioButton)findViewById(R.id.warn_mode); 
     grey_mode =(RadioButton)findViewById(R.id.grey_mode); 
     QueGroup1 =(RadioGroup)findViewById(R.id.QueGroup1); 
QueGroup1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    public void onCheckedChanged(RadioGroup rg, int checkedId) { 
     // TODO Auto-generated method stub 
     for(int i=0; i<rg.getChildCount(); i++) { 

      //RadioButton btn = (RadioButton) rg.getChildAt(i); 
      if(default_mode.getId() == checkedId) { 
       default_method(); 
       colorTouched(); 

       return; 
      } 
      else if(warn_mode.getId() == checkedId) 
      { 
       warn_method(); 

       return; 
      } 
      else if(grey_mode.getId() == checkedId){ 
       grey_method(); 

       return; 
      } 
     } 
    } 
}); 

的問題是,當我在DEFAULT_MODE選定然後warn_mode

方法選擇named colorTouched();仍在工作。我真正想知道的是如何從其他單選按鈕停止該方法。防爆。如果我選擇warn_mode,那麼方法warn_method()只能工作。

在此先感謝:))

+0

我不知道,當你說你是什麼意思 「命名colorTouched()方法;仍在工作」。你是否在這個方法中啓動一個線程或者其他東西來繼續運行? – HenrikS

+0

我沒有做任何事情來保持這種方法運行。我的意思是,在這種情況下, if(default_mode.getId()== checkedId){ default_method(); colorTouched(); return; } 我只想要default_method(); colorTouched();這兩種方法只能運行。 – Mint

回答

1

嘗試了您的代碼。不明白for循環在做什麼,所以我刪除了那個。

事情似乎符合預期。你的佈局可能有問題嗎?

這是我使用的代碼。

XML的代碼

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <RadioGroup android:id="@+id/que_group" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <RadioButton android:layout_height="wrap_content" 
      android:layout_width="wrap_content" android:id="@+id/default_mode" 
      android:text="Default Mode" android:checked="true"></RadioButton> 
     <RadioButton android:layout_height="wrap_content" 
      android:layout_width="wrap_content" android:id="@+id/warn_mode" 
      android:text="Warn Mode"></RadioButton> 
     <RadioButton android:layout_height="wrap_content" 
      android:layout_width="wrap_content" android:id="@+id/grey_mode" 
      android:text="Grey Mode"></RadioButton> 
    </RadioGroup> 
</LinearLayout> 

的Java -code

package com.test.radiogrouptest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 

public class RadioGroupTestActivity extends Activity { 
    public static final String TAG = "RGTA"; 
    RadioGroup queRG; 
    RadioButton defaultModeRB, warnModeRB, greyModeRB; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     queRG = (RadioGroup) findViewById(R.id.que_group); 
     defaultModeRB = (RadioButton) findViewById(R.id.default_mode); 
     warnModeRB = (RadioButton) findViewById(R.id.warn_mode); 
     greyModeRB = (RadioButton) findViewById(R.id.grey_mode); 
     queRG.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      public void onCheckedChanged(RadioGroup rg, int checkedId) { 
       if (defaultModeRB.getId() == checkedId) { 
        defaultMethod(); 
        colorTouched(); 
        return; 
       } else if (warnModeRB.getId() == checkedId) { 
        warnMethod(); 
        return; 
       } else if (greyModeRB.getId() == checkedId) { 
        greyMethod(); 
        return; 
       } 
      } 
     }); 
    } 

    public void defaultMethod() { 
     Log.d("TAG", "defaultMethod"); 
    } 

    public void colorTouched() { 
     Log.d("TAG", "colorTouched"); 
    } 

    public void warnMethod() { 
     Log.d("TAG", "warnMethod"); 
    } 

    public void greyMethod() { 
     Log.d("TAG", "greyMethod"); 
    } 
} 
+0

非常感謝HenrikS你太慷慨了! – Mint