Android Developer
Android Developer

Reputation: 1039

Error in changing button visibility onClick

I have a button which is called Check, I want it to be invisible and visible as I click each time on it, as If its visible and I clicked it will become invisible and verse vies !

But my code doesn't work ! any ideas ?

 Button Check ;
        @Override   
         public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);  
           setContentView(R.layout.settings);

        Check  = (Button)findViewById(R.id.checkButton);

           Check.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View View) {



                if (View.getVisibility() == android.view.View.VISIBLE) 
                        View.setVisibility(android.view.View.INVISIBLE);
                        else if (View.getVisibility() == android.view.View.INVISIBLE)
                            View.setVisibility(android.view.View.VISIBLE);

            }
        });

In my activity its visible at the beginning and when I click on it, it become invisible, BUT when I click again it stays invisible !

Upvotes: 0

Views: 2469

Answers (2)

Moin Ahmed
Moin Ahmed

Reputation: 2898

Change your code to this,

Check.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                if (v.isShown()) 
                        v.setVisibility(View.INVISIBLE);
                else
                        v.setVisibility(View.VISIBLE);

            }

But i think problem is, when button goes invisible, you are not getting any click event on it. First make sure that onClick method get call when button is invisible.

An invisible button will not dispatch any interaction event. So instead of setting button's visibility to the invisible, you can set a transparent or blank background or something like that.

But i personally believe, you should change your use-case because why one will click on the invisible button.

Upvotes: 3

Nimish Choudhary
Nimish Choudhary

Reputation: 2088

Try This:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="abcd" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:onClick="abc"
        android:text="Button" />
</LinearLayout>



public void abc(View v) {
    v.setVisibility(View.INVISIBLE);
}

public void abcd(View v) {
    v.findViewById(R.id.button1).setVisibility(View.VISIBLE);
}

Invisible Items don't receive on-click event. So the only way you can receive a click on invisible is by receiving on some other view in place of the invisible view. The above solution wraps the button in a layout, so when button is invisible the on-click is passed on to layout, which handles the event and do accordingly. If you have a high usage of such layout you can also create a custom button with above mechanism.

Upvotes: 1

Related Questions