单击侦听器上的单选按钮仅在选择切换按钮后才起作用

时间:2013-11-16 20:25:37

标签: java android xml onclicklistener

在我的XML中,我有一个带有切换按钮的相对布局,以及2组单选按钮。

现在它被设置为当选择第一个单选按钮组中的单选按钮“拼写”时,它应该将单选按钮组“spellButtons”放到前面。

但是,只有在我触摸了至少一次切换按钮时才有效。理想情况下,我不必触摸切换按钮以使我的onClick代码正常工作,特别是因为我打算最终使切换按钮成为暂停按钮。

这是我的XML:

    RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/mainLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    tools:context=".MainActivity"
     >

    <ToggleButton
        android:id="@+id/pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="Toggle Yo" />

    <RadioGroup
        android:id="@+id/combatSwitchButtons"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/spells"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:background="@drawable/radio"
            android:button="@null"
            android:textColor="@android:color/black" />

        <RadioButton
            android:id="@+id/summons"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="false"
            android:background="@drawable/radio"
            android:button="@null"
            android:textColor="@android:color/black" />

        <RadioButton
            android:id="@+id/power"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="false"
            android:background="@drawable/radio"
            android:button="@null"
            android:textColor="@android:color/black" />
    </RadioGroup>

    <RadioGroup
        android:id="@+id/spellButtons"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/spell1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="hi" 
            android:textColor="@android:color/black"/>

        <RadioButton
            android:id="@+id/spell2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" " />

        <RadioButton
            android:id="@+id/spell3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" " />
        <RadioButton
            android:id="@+id/spell4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" " />

        <RadioButton
            android:id="@+id/drone1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" " />

        <RadioButton
            android:id="@+id/drone2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" " />
    </RadioGroup>

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/combatSwitchButtons"
        android:layout_centerVertical="true" >

    </RadioGroup>

</RelativeLayout>

这是我的代码

        findViewById(R.id.combatSwitchButtons).bringToFront();
    findViewById(R.id.pause).bringToFront();

    //this sets up the toggle button which will become a pause button
    findViewById(R.id.pause).setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {               
            //TODO: Pause the game
        }
    });

    //This is for if we click spells on the switch interface. It'll make the spell buttons appear
    findViewById(R.id.spells).setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {   
            //change the mode
            game.spells=false;
            game.power=false;
            game.summons=true;

            //add the spells buttons and the drones
            if(findViewById(R.id.spellButtons).isSelected())
                            {
                findViewById(R.id.spellButtons).bringToFront();
                                    System.out.println("brought it to the front");
                            }
            else{
                findViewById(R.id.spellButtons).setVisibility(View.INVISIBLE);
            }   

            //TODO: remove other buttons
        }
    });

2 个答案:

答案 0 :(得分:0)

在你的onClickListener中拼写你的RadioGroup spellButtons isSelected()。 如果你想让它出现在你点击RadioButton法术时你不需要if循环。而不是使用bringToFront为什么不使用setVisibility()?

这样的事情:

findViewById(R.id.spells).setOnClickListener(new OnClickListener()
{
    public void onClick(View v)
    {   
        //change the mode
        game.spells=false;
        game.power=false;
        game.summons=true;

        //add the spells buttons and the drones
        ((RadioGroup) findViewById(R.id.spellButtons)).setVisibility(View.VISIBLE);
        System.out.println("brought it to the front");
    }
});

如果你想在点击另一个单选按钮时隐藏它,只需为它设置setOnClickListener并使spellButtons可见性不可见或已消失

答案 1 :(得分:0)

显然我需要将spellButton单选按钮组放到前面并在我进入onclick监听器之前将其设置为不可见。在onclick监听器中,我可以使用setVisibility(View.Visible)。

我的代码最终看起来像

    findViewById(R.id.combatSwitchButtons).bringToFront();
    findViewById(R.id.pause).bringToFront();
    findViewById(R.id.spellButtons).bringToFront(); 
    findViewById(R.id.spellButtons).setVisibility(View.GONE);

    //this sets up what each button does.
    findViewById(R.id.pause).setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {               
            //TODO: Pause the game
        }
    });

    /*ALLL the on click listeners*/
    //This is for if we click spells on the switch interface. It'll make the spell buttons appear
    findViewById(R.id.spells).setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {   
            //change the mode
            game.spells=false;
            game.power=false;
            game.summons=true;

            //add the spells buttons and the drones
                findViewById(R.id.spellButtons).setVisibility(View.VISIBLE);    
    //TODO: remove other buttons
        }
    });