Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何有条件地“删除”或隐藏按钮?_Java_Android_Xml_Android Xml - Fatal编程技术网

Java 如何有条件地“删除”或隐藏按钮?

Java 如何有条件地“删除”或隐藏按钮?,java,android,xml,android-xml,Java,Android,Xml,Android Xml,我有一个包含回收视图的片段 在recyclerView中单击某个项目时,我将recyclerView项目背景设置为绿色,并将saveBtn文本更改为更新 我还需要能够在用户每次单击recyclerView项目时删除deletebtn,或者将其隐藏,以便UI看起来像这样: 这怎么可能呢 我用于在recyclerView单击时更新UI的方法 XML 将LinearLayout用作ConstraintLayout的直接子级会破坏使用ConstraintLayout的整个目的。从性能的角度来看,使用嵌套

我有一个包含回收视图的片段

在recyclerView中单击某个项目时,我将recyclerView项目背景设置为绿色,并将saveBtn文本更改为更新

我还需要能够在用户每次单击recyclerView项目时删除deletebtn,或者将其隐藏,以便UI看起来像这样:

这怎么可能呢

我用于在recyclerView单击时更新UI的方法

XML

将LinearLayout用作ConstraintLayout的直接子级会破坏使用ConstraintLayout的整个目的。从性能的角度来看,使用嵌套布局不是一个好的做法。此外,如果deleteBtn是ConstraintLayout的直接子级,那么如果我们将deleteBtn的可见性更改为“消失”,则将saveBtn的布局宽度设置为“匹配”constraint将使其占据整个空间。

使用LinearLayout作为ConstraintLayout的直接子级将无法达到使用ConstraintLayout的全部目的。从性能的角度来看,使用嵌套布局不是一个好的做法。此外,如果deleteBtn是ConstraintLayout的直接子级,那么如果我们将deleteBtn的可见性更改为gone,那么将saveBtn的布局宽度设置为match constraint将使其占据整个空间。

的答案很好,这是推荐的方法,因为您的根视图组是ConstraintLayout。但是,我想向您介绍一种使用当前线性布局方法实现此目的的替代方法

您所需要做的就是将两个底部的宽度设置为0dp。这样一来,它们的重量将决定它们所占据的空间大小。如果两个视图都可见,则每个视图将占屏幕总宽度的50%。如果只有一个按钮可见,它将占据整个屏幕。下面是一段代码片段,可以指导您:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:orientation="horizontal">

    <Button
        android:id="@+id/save_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_weight="1"
        android:background="@drawable/my_small_green_shape"
        android:text="Save"
        android:textColor="#ffffff"
        android:textSize="20sp" />

    <Button
        android:id="@+id/clear_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_weight="1"
        android:background="@drawable/my_small_red_shape"
        android:text="Clear"
        android:textColor="#ffffff"
        android:textSize="20sp" />

</LinearLayout>
并不是说这种方法涉及到嵌套布局,而且从长远来看,这可能会影响性能,并且会很快使布局代码复杂化。

的答案很好,这是推荐的方法,因为您的根视图组是ConstraintLayout。但是,我想向您介绍一种使用当前线性布局方法实现此目的的替代方法

您所需要做的就是将两个底部的宽度设置为0dp。这样一来,它们的重量将决定它们所占据的空间大小。如果两个视图都可见,则每个视图将占屏幕总宽度的50%。如果只有一个按钮可见,它将占据整个屏幕。下面是一段代码片段,可以指导您:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:orientation="horizontal">

    <Button
        android:id="@+id/save_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_weight="1"
        android:background="@drawable/my_small_green_shape"
        android:text="Save"
        android:textColor="#ffffff"
        android:textSize="20sp" />

    <Button
        android:id="@+id/clear_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_weight="1"
        android:background="@drawable/my_small_red_shape"
        android:text="Clear"
        android:textColor="#ffffff"
        android:textSize="20sp" />

</LinearLayout>

并不是说这种方法涉及到嵌套布局,而且从长远来看,这可能会影响性能,并且会使布局代码非常快地复杂化。

将LinearLayout用作ConstraintLayout的直接子级会破坏使用ConstraintLayout的整个目的。从性能的角度来看,使用嵌套布局不是一个好的做法。此外,如果deleteBtn是ConstraintLayout的直接子级,那么如果我们将deleteBtn的可见性更改为gone,则将saveBtn的布局宽度设置为与约束匹配,将使其占用整个空间。谢谢,太好了。请您将此作为一个答案,以便我可以接受它是正确的吗?使用LinearLayout作为ConstraintLayout的直接子对象会破坏使用ConstraintLayout的整个目的。从性能的角度来看,使用嵌套布局不是一个好的做法。此外,如果deleteBtn是ConstraintLayout的直接子级,那么如果我们将deleteBtn的可见性更改为gone,则将saveBtn的布局宽度设置为与约束匹配,将使其占用整个空间。谢谢,太好了。请你把这个作为一个答案,这样我就可以接受它是正确的吗?
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:orientation="horizontal">

    <Button
        android:id="@+id/save_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_weight="1"
        android:background="@drawable/my_small_green_shape"
        android:text="Save"
        android:textColor="#ffffff"
        android:textSize="20sp" />

    <Button
        android:id="@+id/clear_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_weight="1"
        android:background="@drawable/my_small_red_shape"
        android:text="Clear"
        android:textColor="#ffffff"
        android:textSize="20sp" />

</LinearLayout>