1

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.

guipivoto
  • 18,327
  • 9
  • 60
  • 75
Liam Botha
  • 19
  • 3

3 Answers3

1

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
    }
}
guipivoto
  • 18,327
  • 9
  • 60
  • 75
  • worth noting (for OP) that a `switch` statement without a `break` is called a fall-through https://stackoverflow.com/questions/188461/switch-statement-fallthrough-should-it-be-allowed – a_local_nobody Oct 04 '19 at 13:48
  • Thank you so much i feel really stupid now.... I did not even notice. – Liam Botha Oct 04 '19 at 13:50
0

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;

    }
}
Kishore Jethava
  • 6,666
  • 5
  • 35
  • 51
0

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
   }
}
Hayk Mkrtchyan
  • 2,835
  • 3
  • 19
  • 61