Liam Botha
Liam Botha

Reputation: 19

Hide ImageView hides multiple images

I'm trying to hide a specific die after it has been selected and used. However, it keeps hiding all the ImageView below the one select

I've tried using different containers but can't seem to figure it out

This is XML for the dice for 3 of the dice:

<ImageView
        android:id="@+id/img4"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:onClick="Select"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline3"
        app:srcCompat="?attr/colorControlHighlight" />

    <ImageView
        android:id="@+id/img3"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:onClick="Select"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline2"
        app:srcCompat="?attr/colorControlHighlight" />

    <ImageView
        android:id="@+id/img1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="40dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:onClick="Select"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="?attr/colorControlHighlight" />

    <androidx.constraintlayout.widget.Guideline

This is the method used to hide the dice:

public void RemoveDice(int pos) {
    switch (pos) {
        case 0:
            img1.setVisibility(View.INVISIBLE);
        case 1:
            img2.setVisibility(View.GONE);
        case 2:
            img3.setVisibility(View.GONE);
        case 3:
            img4.setVisibility(View.INVISIBLE);
        case 4:
            img5.setVisibility(View.GONE);
        case 5:
            img6.setVisibility(View.GONE);
        case 6:
            img7.setVisibility(View.GONE);
        case 7:
            img8.setVisibility(View.INVISIBLE);
        case 8:
            img9.setVisibility(View.GONE);
    }
}

This shows before selecting Blue 6 https://prnt.sc/peufqr
This after the selected die has been removed https://prnt.sc/peugn7

I think my problem lies somewhere in the XML file but I am unsure what containers to use to prevent this.

Upvotes: 1

Views: 67

Answers (3)

Hayk Mkrtchyan
Hayk Mkrtchyan

Reputation: 3265

Add breaks after every statement.

public void RemoveDice(int pos) {
    switch (pos) {
       case 0:
           img1.setVisibility(View.INVISIBLE);
           break; // Add this
       case 1:
           img2.setVisibility(View.GONE);
           break; // Add this
       case 2:
           img3.setVisibility(View.GONE);
           break; // Add this
       case 3:
           img4.setVisibility(View.INVISIBLE);
           break; // Add this
       case 4:
           img5.setVisibility(View.GONE);
           break; // Add this
       case 5:
           img6.setVisibility(View.GONE);
           break; // Add this
       case 6:
           img7.setVisibility(View.GONE);
           break; // Add this
       case 7:
           img8.setVisibility(View.INVISIBLE);
           break; // Add this
       case 8:
           img9.setVisibility(View.GONE);
           break; // Add this
   }
}

Upvotes: 0

Kishore Jethava
Kishore Jethava

Reputation: 6834

You are not breaking switch case. use break statement

public void RemoveDice(int pos)
{
    switch (pos)
    {
        case 0:
            img1.setVisibility(View.INVISIBLE);
            break;
        case 1:
            img2.setVisibility(View.GONE);
            break;
        case 2:
            img3.setVisibility(View.GONE);
            break;
        case 3:
            img4.setVisibility(View.INVISIBLE);
            break;
        case 4:
            img5.setVisibility(View.GONE);
            break;
        case 5:
            img6.setVisibility(View.GONE);
            break;
        case 6:
            img7.setVisibility(View.GONE);
            break;
        case 7:
            img8.setVisibility(View.INVISIBLE);
            break;
        case 8:
            img9.setVisibility(View.GONE);
            break;

    }
}

Upvotes: 0

guipivoto
guipivoto

Reputation: 18697

You are missing break between each case. When using a switch, you have to add a break. Otherwise, it will execute any code until it reaches the end of the switch statement.

public void RemoveDice(int pos) {
    switch (pos) {
        case 0:
            img1.setVisibility(View.INVISIBLE);
            break; // Add this
        case 1:
            img2.setVisibility(View.GONE);
            break; // Add this
        case 2:
            img3.setVisibility(View.GONE);
            break; // Add this
        case 3:
            img4.setVisibility(View.INVISIBLE);
            break; // Add this
        case 4:
            img5.setVisibility(View.GONE);
            break; // Add this
        case 5:
            img6.setVisibility(View.GONE);
            break; // Add this
        case 6:
            img7.setVisibility(View.GONE);
            break; // Add this
        case 7:
            img8.setVisibility(View.INVISIBLE);
            break; // Add this
        case 8:
            img9.setVisibility(View.GONE);
            break; // Add this
    }
}

Upvotes: 1

Related Questions