Переключить невидимое и видимое из LinearLayout - PullRequest
0 голосов
/ 06 января 2020

В настоящее время у меня есть код, который должен переключать LinearLayout между VISIBLE и GONE, но он переключается только в том случае, если он видим, и не переключается, если Layout выключен. Может кто-нибудь объяснить, что я сделал не так?

XML:

<ImageButton
    android:id="@+id/info_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@drawable/myimage"
    android:onClick="toggleInfo"/>

<LinearLayout
    android:id = "@+id/text_box"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="visible"
    android:gravity="center">

    <TextView
        android:id="@+id/info_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/test"
        android:textSize="18sp"
        android:textStyle="normal"
        android:background="@color/white"
        />

</LinearLayout>

JAVA:

public void toggleInfo(View view) {
    LinearLayout infoText = findViewById(R.id.text_box);

    if (infoText.getVisibility() == LinearLayout.GONE) {
        infoText.setVisibility(LinearLayout.VISIBLE);
    }

    if (infoText.getVisibility() == LinearLayout.VISIBLE) {
        infoText.setVisibility(LinearLayout.GONE);
    }
}

Ответы [ 3 ]

1 голос
/ 06 января 2020

Просто сделайте это:

public void toggleInfo(View view) {
    LinearLayout infoText = findViewById(R.id.text_box);
    infoText.setVisibility(infoText.getVisibility() == LinearLayout.GONE ? LinearLayout.VISIBLE : LinearLayout.GONE);
}
1 голос
/ 09 января 2020

Рупам абсолютно прав. Другой способ исправить это - добавить возврат к вашему первому условию
, также избегайте использования LinearLayout.GONE
, лучше используйте View.GONE вместо этого (если что-то изменится - например, вы решите использовать RelativeLayout вместо текущего LinearLayout. .. ну ... ты понял меня, я думаю)

if (infoText.getVisibility() == LinearLayout.GONE) {
        infoText.setVisibility(LinearLayout.VISIBLE);
        return;
    }

    if (infoText.getVisibility() == LinearLayout.VISIBLE) {
        infoText.setVisibility(LinearLayout.GONE);
    }
1 голос
/ 06 января 2020

По умолчанию ваш макет виден. И когда вы вызываете метод, он проверяет, является ли представление видимым. Второе условие if удовлетворяет этому. Итак, в первый раз вызывается LinearLayout.GONE.

Но когда вы нажимаете второй раз (теперь ваше представление не видно), первое условие удовлетворяется, и вызывается LinearLayout.VISIBLE. Теперь ваш взгляд виден. Таким образом, второе условие также удовлетворяется, и LinearLayout.GONE вызывается снова.

Просто поставь и еще и все заработает.

public void toggleInfo(View view) {
    LinearLayout infoText = findViewById(R.id.text_box);

    if (infoText.getVisibility() == LinearLayout.GONE) {
        infoText.setVisibility(LinearLayout.VISIBLE);
    }else if (infoText.getVisibility() == LinearLayout.VISIBLE) {
        infoText.setVisibility(LinearLayout.GONE);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...