2016-12-17 56 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

(我不能评论,所以我不得不发布一个新的答案)