2016-12-17 117 views
0

我在我的xml文件中添加了三個單選按鈕。每個單選按鈕都在單獨的LinearLayout中,但是是相同的xml。首先,我不知道如何將它們添加到radiogroup,同時將它們保留在單獨的LinearLayouts中。其次,我寫了下面的代碼來檢查只有一個單選按鈕。但是這不起作用。請讓我知道我應該如何繼續,如果有更好的解決方案。這是代碼。Android單選按鈕未選中

RadioButton screenof; 
RadioButton screenof3; 
RadioButton onexit; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.settings); 
    screenof = (RadioButton)findViewById(R.id.radioscreenof); 
    screenof.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(!screenof.isChecked()) 
      { 
       screenof.setChecked(true); 
       screenof3.setChecked(false); 
       onexit.setChecked(false); 
      } 
     } 
    }); 
    screenof3 = (RadioButton)findViewById(R.id.radioscreenof3); 
    screenof3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(!screenof3.isChecked()) 
      { 
       screenof3.setChecked(true); 
       screenof.setChecked(false); 
       onexit.setChecked(false); 
      } 
     } 
    }); 
    onexit = (RadioButton)findViewById(R.id.radiolockimmediately); 
    onexit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(!onexit.isChecked()) 
      { 
       screenof3.setChecked(false); 
       screenof.setChecked(false); 
       onexit.setChecked(true); 
      } 
     } 
    }); 
} 

這裏是xml文件

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_weight="1" 
    android:background="@color/widgetcolor" 
    > 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/deactiveTexts" 
     android:clickable="false" 
     android:layout_weight="1" 

     > 

     <TextView 
      android:text="Lock Mode" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:layout_weight="1" 
     android:id="@+id/lockscreenof" 

     > 

     <TextView 
      android:text="Lock apps at screen off" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView2" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 

     <RadioButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/radioscreenof" 
      android:layout_weight="1" 
      android:paddingRight="30dp" 
      app:buttonTint="@android:color/holo_green_dark" 
      android:elevation="0dp" 
      android:duplicateParentState="false" 
      android:checked="false" 
      /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:layout_weight="1" 
     android:id="@+id/lockscreenof3" 
     > 

     <TextView 
      android:text="Lock apps after screen of for 3 minutes" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView3" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 

     <RadioButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/radioscreenof3" 
      android:layout_weight="1" 
      android:paddingRight="30dp" 
      app:buttonTint="@android:color/holo_green_dark" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:layout_weight="1" 
     android:id="@+id/lockimmediately" 
     > 

     <TextView 
      android:text="Lock apps immediately upon exit" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView1" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 

     <RadioButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/radiolockimmediately" 
      android:layout_weight="1" 
      android:paddingRight="30dp" 
      app:buttonTint="@android:color/holo_green_dark" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:id="@+id/passonce" 
     android:layout_weight="1" 
     > 

     <TextView 
      android:text="Enter password once to unlock all apps" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView4" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/checkpassonce" 
      android:layout_weight="1" 
      android:paddingRight="30dp" 
      app:buttonTint="@android:color/holo_green_dark" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:id="@+id/displayhint" 
     android:layout_weight="1" 
     > 

     <TextView 
      android:text="Display lock mode hint" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView5" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/checkhint" 
      android:layout_weight="1" 
      android:paddingRight="30dp" 
      app:buttonTint="@android:color/holo_green_dark" 
      android:checked="false" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/deactiveTexts" 
     android:clickable="false" 
     android:layout_weight="1" 
     > 

     <TextView 
      android:text="Password" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView6" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:clickable="true" 
     android:id="@+id/changepass" 
     android:layout_weight="1" 
     > 

     <TextView 
      android:text="Change password" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_margin="1dp" 
     android:background="@color/colorAccent" 
     android:id="@+id/invisiblepattern" 
     android:layout_weight="1" 
     > 

     <TextView 
      android:text="Invisible Pattern" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textSize="17dp" 
      android:layout_weight="1" 
      android:textStyle="bold" /> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/checkpatinvisible" 
      android:layout_weight="1" 
      android:paddingRight="30dp" 
      app:buttonTint="@android:color/holo_green_dark" /> 
    </LinearLayout> 

</LinearLayout> 

我編輯的代碼並粘貼您的代碼,但是當我跑的代碼有意想不到的效果。我把打印報告,這是它打印。我點擊了按鈕從上到下一次。

Case 1 
Case 1 
Case 2 
Case 2 
Case 1 
Case 2 
Case 3 

回答

2

您可以通過實現做到這一點OnCheckedChangeListener

試試下面的代碼,將工作的你 -

screenof= (RadioButton) findViewById(R.id.radioscreenof); 
screenof.setOnCheckedChangeListener(quest1); 
screenof3= (RadioButton) findViewById(R.id.radioscreenof3); 
screenof3.setOnCheckedChangeListener(quest1); 
onExit= (RadioButton) findViewById(R.id.radiolockimmediately); 
onExit.setOnCheckedChangeListener(quest1); 

CompoundButton.OnCheckedChangeListener quest1 = new CompoundButton.OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     switch (buttonView.getId()) { 
      case R.id.radioscreenof: 
       radioscreenof.setChecked(true); 
       radioscreenof3.setChecked(false); 
       onnExit.setChecked(false); 
       break; 

      case R.id.radioscreenof3: 
       radioscreenof.setChecked(false); 
       radioscreenof3.setChecked(true); 
       onnExit.setChecked(false); 
       break; 
      case R.id.onExit: 
       radioscreenof.setChecked(false); 
       radioscreenof3.setChecked(false); 
       onExit.setChecked(true);    
     } 
    } 
}; 
+0

仍然沒有工作。我把打印聲明,並點擊每個RadioButton,這就是它打印什麼''System.out:案例1 System.out:案例1 System.out:案例2 System.out:案例2 System.out:案例1 System.out:案例2 System.out:案例3 –

0

使用此佈局:

<?xml version="1.0" encoding="utf-8"?> 
<RadioGroup 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="left" 
    android:layout_margin="25dp" 
    android:background="#FF0" 
    android:paddingRight="50dp" 
    > 

    <RadioButton 
     android:id="@+id/radioscreenof" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Lock apps at screen off" 
     android:onClick="onRadioButtonClicked" 
     /> 
    <RadioButton 
     android:id="@+id/radioscreenof3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Lock apps after screen of for 3 minutes" 
     android:onClick="onRadioButtonClicked" 
     /> 
    <RadioButton 
     android:id="@+id/radiolockimmediately" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Lock apps immediately upon exit" 
     android:onClick="onRadioButtonClicked" 
     /> 

</RadioGroup> 

然後爲點擊監聽首先清除所有檢查的radiogroup

//reference radiogroup ID from layout file 
radiogroup.clearCheck(); 

設置一個checkedchange偵聽RadioGroup中

radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      Log.d("chk", "id" + checkedId); 

      if (checkedId == R.id.a) { 
       //R.id.a = RadioButton ID in layout 
       //some code 
      } else if (checkedId == R.id.b) { 
       //some code 
      } 

     } 

    }); 

你可以單選也programetically火聽衆..

rb = (RadioButton) view.findViewById(R.id.a); 
rb.setChecked(true); 
0

試試這個:

screenof= (RadioButton) findViewById(R.id.radioscreenof); 
screenof.setOnCheckedChangeListener(quest1); 
screenof3= (RadioButton) findViewById(R.id.radioscreenof3); 
screenof3.setOnCheckedChangeListener(quest1); 
onExit= (RadioButton) findViewById(R.id.radiolockimmediately); 
onExit.setOnCheckedChangeListener(quest1); 

CompoundButton.OnCheckedChangeListener quest1 = new CompoundButton.OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     switch (buttonView.getId()) { 
      case R.id.radioscreenof: 
       radioscreenof.setChecked(true); 
       radioscreenof3.setChecked(false); 
       onnExit.setChecked(false); 
       break; 

      case R.id.radioscreenof3: 
       radioscreenof.setChecked(false); 
       radioscreenof3.setChecked(true); 
       onnExit.setChecked(false); 
       break; 
      case R.id.radiolockimmediately: 
       radioscreenof.setChecked(false); 
       radioscreenof3.setChecked(false); 
       onExit.setChecked(true);    
     } 
    } 
}; 

這是@阿米特回答我只是r在eplaced R.id.onExitR.id.radiolockimmediately onCheckedChanged

(我不能評論,所以我不得不發佈一個新的答案)