(Android) Макет не будет перерисован после setVisibility (view.GONE)? - PullRequest
5 голосов
/ 14 января 2012

В приложении у меня есть:

LinearLayout linearLayout2 = (LinearLayout) findViewById(R.id.cvLinearLayout2);

и после :

linearLayout2.setVisibility(View.GONE);

Я не могу найти способ вернуть linearLayout2.

Перепробовал все:

  linearLayout2.setVisibility(View.VISIBLE);
  linearLayout2.bringToFront();
  linearLayout2.getParent().requestLayout();
  linearLayout2.forceLayout();
  linearLayout2.requestLayout();
  linearLayout2.invalidate();

но без результатов. linearLayout2 есть один родитель linearLayout1, поэтому я попробовал также:

  linearLayout1.requestLayout();
  linearLayout1.invalidate();

все еще с нулевым результатом. linearLayout2 остается GONE. В моем приложении мне нужно убрать linearLayout, а затем через некоторое время перерисовать его снова. Пожалуйста, помогите.

Ответы [ 2 ]

9 голосов
/ 14 января 2012

View.GONE удалит вид с экрана, а пространство, занимаемое этим видом, освободится для других видов на экране.Таким образом, представление «GONE» не может вернуться.Вам нужно перезагрузить его.

Если вы хотите сохранить место, вы можете использовать View.INVISIBLE.Теперь вид НЕ удаляется, вместо этого он скрывает вид и отображает пустое пространство.

На простом рисунке у вас есть следующие настройки:

ABCD

Последля звонка B.setVisibility(View.INVISIBLE); у вас будет:

A CD

Но после звонка B.setVisibility(View.GONE); вы получите:

ACD

3 голосов
/ 14 января 2012

Настройка видимости GONE не должна влиять на его способность «возвращаться» с помощью метода setVisibility (View.VISIBLE)

Например, у меня есть этот код в одном из моих приложений:

public void onCheckedChanged(CompoundButton checkBox, boolean isChecked{
    if(checkBox == usesLocationCheckBox)
    {
        View view = findViewById(R.id.eventLocationOptions);
        if(isChecked)
        {
            view.setVisibility(View.VISIBLE);
            usesTimeCheckBox.setEnabled(false);
        }
        if(!isChecked)
        {
            view.setVisibility(View.GONE);
            usesTimeCheckBox.setEnabled(true);
        }
    }}

И это прекрасно работает. Другой код, выполняемый вашей программой, должен быть ответственным. Измените ваше сообщение с соответствующим кодом, и мы сможем дать вам лучший ответ.

...