Koorosh
Koorosh

Reputation: 301

Button setOnClickListener is not working only for one button

I have two different buttons in my activity, and an if statement to show them...

My if statement is working well and show the right button, but one of those buttons is not doing anything when I click on it! (Actually, it's not clickable at all!)

        if (isNeeded)
        {
            // buttonImportant is not clickable
            buttonImportant.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.d("LOG", "Clicked!"); // Even this log won't work!
                    Intent intentDetailsActivity = new Intent(MainActivity.this, DetailsActivity.class);
                    intentDetailsActivity.putExtra("extraPosition", String.valueOf(position));
                    startActivity(intentDetailsActivity);
                }

            });

            linearLayoutImportant.setVisibility(View.VISIBLE); // This line is working
        }

        if (!isNeeded)
        {
            // buttonNormal is working well!
            buttonNormal.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    linearLayoutNormal.setVisibility(View.GONE);

                    Intent intentDetailsActivity = new Intent(MainActivity.this, DetailsActivity.class);
                    intentDetailsActivity.putExtra("extraPosition", String.valueOf(position));
                    startActivity(intentDetailsActivity);
                }

            });

            linearLayoutNormal.setVisibility(View.VISIBLE); // And this one is not working too!
        }

The problem is, it won't return any error or log, to know what's the problem! It's log I disabled the button... (which I didn't)

I checked if it's for declarations, but everything is declared well...

I checked the XML, there's no problem there either:

<LinearLayout 
    android:id="@+id/linearLayoutImportant"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="50dp"
    android:layout_centerInParent="true"
    android:gravity="center_vertical|center_horizontal"
    android:orientation="vertical"
    android:visibility="gone" >

    <TextView 
        android:id="@+id/textViewImportant"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/important"
        android:textSize="20sp"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />

    <Button 
        android:id="@+id/buttonImportant"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="@string/details" />

</LinearLayout>

...
...

<LinearLayout
    android:id="@+id/linearLayoutNormal"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_marginTop="25dp"
    android:orientation="vertical"
    android:visibility="gone" >

    <Button 
        android:id="@+id/buttonClose"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_gravity="end"
        android:background="@android:drawable/ic_menu_close_clear_cancel" />

    <TextView 
        android:id="@+id/textViewNormal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:layout_gravity="center_horizontal"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/normal"
        android:textStyle="bold" />

    <Button 
        android:id="@+id/buttonNormal"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_margin="2dp"
        android:layout_gravity="center_horizontal"
        android:text="@string/details" />

</LinearLayout>

EDIT:

Here's the declarations:

LinearLayout linearLayoutImportant, linearLayoutNormal;
Button buttonImportant, buttonClose, buttonNormal;

...
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    linearLayoutImportant = (LinearLayout) findViewById(R.id.linearLayoutImportant );

    buttonImportant = (Button) findViewById(R.id.buttonImportant);

    buttonClose = (Button) findViewById(R.id.buttonClose);
    buttonClose .setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            linearLayoutNormal.setVisibility(View.GONE);
        }

    });

    buttonNormal = (Button) findViewById(R.id.buttonNormal);

    linearLayoutNormal = (LinearLayout) findViewById(R.id.linearLayoutNormal);
}

EDIT 2:

Alright guys, maybe I didn't made it clear...

That isNeeded is a variable and I control it from another place...

When I make it false, the second if will get executed very well, and when I make it true, the first if will execute too, but only the button is not clickable!

EDIT 3:

I also checked .setEnabled(true); or .setClickable(true);, still not working... :/

SOLVED:

I used the HierarchyViewer and found the problem. The problem was in XML... I had a ListView on top of second button, but it was empty, so I thought nothing's there...

Sorry everybody...

Upvotes: 1

Views: 840

Answers (5)

Koorosh
Koorosh

Reputation: 301

I used the HierarchyViewer and found the problem. The problem was in XML... I had a ListView on top of second button, but it was empty, so I thought nothing's there...

Sorry everybody...

Upvotes: 1

Himmat Gill
Himmat Gill

Reputation: 351

There was an error posting my ans so i have taken a screenshot of it. Please review it for your answer

enter image description here

Upvotes: 0

Gray
Gray

Reputation: 855

set isNeeded = true before

if (isNeeded)
        {
            // buttonImportant is not clickable
            buttonImportant.setOnClickListener(new View.OnClickListener() {

then test it again. Good lucky!

Upvotes: 0

Narayan Acharya
Narayan Acharya

Reputation: 1499

The boolean variable isNeeded can take only one of the two values, either true or false. Therefore only one of the if conditions will be executed.

Since only one of the condition is true, you are only setting an onClickListener to one of the buttons and thus the other button won't be clickable and the log message within the onClick method won't be visible in the logs.

Hope this answered your question. All the best :)

Upvotes: 0

David
David

Reputation: 75

Try without the if statement in order to know if is a validation problem and you're only setting one listener

Upvotes: 0

Related Questions