打开某些片段时如何隐藏/显示工具栏上的图标

问题描述 投票:0回答:2

我只有很少的片段和一项活动。该应用程序包含始终可见的工具栏。我的工具栏上有一个图标。我需要在用户打开2,4,5片段时隐藏此图标,并在用户打开1和3片段时显示此图标。我不需要此逻辑的所有代码,我需要建议如何实现它以及在何处为此行为添加一些逻辑的建议

android kotlin navigation fragment
2个回答
0
投票

假设您正在使用jetpack的导航和单个活动,以下为真:

将目标更改侦听器添加到活动内的主导航控制器(addOnDestinationChangedListener,界面为NavController.OnDestinationChangedListener)。在侦听器内部,您可以在destination.id实现中检查onDestinationChanged。实际上,您可以创建两个这样的集合

private val twoFourFiveDestinations =
        setOf(R.id.two, R.id.four, R.id.five) 
private val oneThreeDestinations =
        setOf(R.id.one, R.id.three)

只需像if(twoFourFiveDestinations.contains(destination.id) ...这样进行检查并相应地管理图标的可见性,这将使生活更轻松。

替代解决方案是将图标管理移交给片段。您可以定义一些与活动进行通信的界面,并在各个片段启动并运行时管理工具栏图标。但是您需要在问题的每个片段中都这样做。


0
投票

如果使用Java,则创建一个伴随对象或静态变量。

class Util {companion object { lateinit var toolbarImg: ImageView }}  

在onCreate的主要活动中,初始化工具栏和图像视图

toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
Util.toolbarImg = toolbar.findViewById(R.id.cartImg)

XML

    <com.google.android.material.appbar.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay">

        <ImageView
            android:id="@+id/cartImg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:visibility="visible"
             />

    </androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>

现在您所需要做的就是控制此ImageView的可见性。关于片段交易

隐藏

if(Util.toolbarImg.visibility == View.VISIBLE){
Util.toolbarImg.visibility = View.GONE }
© www.soinside.com 2019 - 2024. All rights reserved.