简体   繁体   English

未选中 Android 单选按钮

[英]Android Radio Button Not Checked

I am adding three radio buttons in my xml file.我在我的 xml 文件中添加了三个单选按钮。 each radio button is in separate LinearLayout but same xml.每个单选按钮都在单独的 LinearLayout 但相同的 xml 中。 Firstly i don't know how to add them to radiogroup while keeping them in separate LinearLayouts.首先,我不知道如何将它们添加到 radiogroup,同时将它们保存在单独的 LinearLayouts 中。 secondly i wrote the following code to check only one radio button.其次,我编写了以下代码来仅检查一个单选按钮。 But this is not working.但这是行不通的。 Please let me know how should i proceed and if there is any better solution.请让我知道我应该如何进行以及是否有更好的解决方案。 Here is the code.这是代码。

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);
            }
        }
    });
}

Here is the xml file这是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>

I edited the code and pasted your code but when i ran the code there were unexpected results.我编辑了代码并粘贴了您的代码,但是当我运行代码时出现了意想不到的结果。 I put the print statements and here is what it printed.我放了打印语句,这是它打印的内容。 I clicked on the buttons top - down once.我点击了自上而下的按钮一次。

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

You can do this by implementing OnCheckedChangeListener您可以通过实现OnCheckedChangeListener来做到这一点

try below code it will work for you-试试下面的代码它会为你工作-

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);              
        }
    }
};

use this layout:使用这种布局:

    <?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>

then for the click listener first clear all check for the radiogroup然后对于点击侦听器首先清除所有检查无线电组

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

setup a checkedchange listener for radiogroup为 radiogroup 设置一个 checkchange 监听器

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
            }

        }

    });

you can programetically fire listener on radioButton too..您也可以以编程方式在 radioButton 上触发侦听器..

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

Try this:尝试这个:

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);              
        }
    }
};

this is @Amit answer I just replaced R.id.onExit with R.id.radiolockimmediately in onCheckedChanged这是@Amit答案,我只是在onCheckedChanged取代R.id.onExitR.id.radiolockimmediately

(I can't comment so I had to post a new answer) (我无法发表评论,所以我不得不发布一个新答案)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM