视图可见性在不可见后不显示

时间:2018-01-11 07:29:34

标签: android android-view

我有两个视图,一个是按钮,另一个是LinearLayout

当我设置View.GONE然后再设置为View.VISIBLE时,视图将不会再次显示 这种机制在过去是有效的。

android:id="@+id/selector_controls"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:background="@drawable/shape_round_white_1"/>

<include
    android:id="@+id/actions_container"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    layout="@layout/wait_request_accept_panel"
    android:visibility="visible"
    android:layout_alignParentBottom="true"
    android:layout_centerInParent="true" />


<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_below="@id/selector_controls"
    android:layout_alignEnd="@id/selector_controls"
    android:layout_alignLeft="@id/selector_controls">

现在......我想要的是切换是wait_request_accept_panel里面的元素这是布局文件,我想在其中切换元素..

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<RelativeLayout
    android:id="@+id/wait_container"
    android:visibility="invisible"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="@drawable/shape_round_white_1">

    <!-- Other view elements -->

</RelativeLayout>


<Button
    android:id="@+id/btnAccept"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    style="@style/H18b"
    android:visibility="visible"
    android:background="@drawable/shape_round_white_1"
    android:text="@string/str_accept"
    android:layout_alignParentTop="true"/>
   </RelativeLayout>

正如你可以看到的那样,基本上有两个元素wait_container在用户等待时显示,而按钮btnAccept只改变状态一次:一个在原始状态,即< strong> wait_container 是GONE,第一次看到按钮Button。当我点击btnAccept时,btn变为 GONE ,等待容器变为可见 这是编程的命令:

switch (req.getType()) {
        case REQ: // this is the initial flow
            waitContainer.setVisibility(View.GONE);
            acceptBtn.setVisibility(View.VISIBLE);
            break;
        case ACCEPT: // after hit the accept btn it toggles the two views
            acceptBtn.setVisibility(View.GONE);
            waitContainer.setVisibility(View.VISIBLE);
            break;
    }

初始详情

waitContainer = (RelativeLayout) view.findViewById(R.id.wait_container);
acceptBtn     = (Button) view.findViewById(R.id.btnAccept);
cancelBtn     = (Button) view.findViewById(R.id.btnCancel);

需要考虑的事情是包含waitContaineracceptBtn的事实,它们来自另一个xml文件,我这样做是因为我想重用代码,但在这一刻并非如此很重要,因为当前屏幕是唯一使用wait_request_accept_panel.xml文件的屏幕。

视图始终存在,但是当片段开始时,它的alpha通道被动画修改,我错误地将viewContainer作为参数发送到动画方法,我将动画方法设置为动画的alpha通道。 / p>

2 个答案:

答案 0 :(得分:2)

您可以尝试使用getVisibility ()

  

返回此视图的可见性状态。

 if(waitContainer.getVisibility()== View.GONE)
    {
      acceptBtn.setVisibility(View.GONE);
      waitContainer.setVisibility(View.VISIBLE);
    }

答案 1 :(得分:2)

在应用 ViSIBLE / GONE 之后检查可见性视图

if(waitContainer.getVisibility()== View.GONE)
    {
      waitContainer.setVisibility(View.VISIBLE);
    }else{
     waitContainer.setVisibility(View.GONE);
    }