如何以编程方式更改底部的应用栏导航图标

时间:2019-01-26 17:36:18

标签: android

我正在制作一个具有一个活动和许多片段的Android应用程序。该活动包含一个底部应用程序栏,该底部栏中有一个导航图标。像这样:

  <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottom_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:backgroundTint="@color/colorbottomappbar"
        app:fabAlignmentMode="center"
        app:navigationIcon="@drawable/ic_menu_green_24dp">

    </com.google.android.material.bottomappbar.BottomAppBar>

此导航菜单图标将显示在每个片段中。但是,在某些片段中,我想将底部应用程序栏中的导航图标更改为后退按钮/图标。我该如何实现?另外,目前,我在主活动中处理导航图标单击。如果出现后退图标,该如何处理点击?它将如何知道当前片段是什么,以及如何确定后退图标会导致哪个片段?

1 个答案:

答案 0 :(得分:0)

如果您查看documentation,您会看到BottomAppBarToolbar扩展而来,它有一个称为setNavigationIcon(int res)的继承方法。

您可以实现主要Activity实现的接口,如下所示:

interface FramentChangedListener {
     void onFragmentChanged(int type);
}

您的活动将执行以下操作:

public class MainActivity extends Activity implements FragmentChangedListener {
    // This will keep track of what is currently shown
    private int current = 0;

    @Override
    public void onFragmentChanged(int type) {
        if (type == FirstFragment.SOME_TYPE) {
            // Update the current fragment value, we're associating each fragment 
            // with an int value.
            current = type;

            bottomAppBar.setNavigationIcon(R.drawable.your_back_icon);
        }
    }
    ...
}

在您的片段中,您将执行以下操作:

public class FirstFragment extends Fragment {
    private FragmentChangedListener listener;
    public static final int SOME_TYPE = 1;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceOf FragmentChangedListener) {
            // context in this case is your activity, which implements FragmentChangedListener
            listener = (FragmentChangedListener) context;

            // You can call the listener now
            listener.onFragmentChanged(SOME_TYPE);
        }
    }
}

在“活动”中,通过setNavigationOnClickListener将侦听器添加到BottomAppBar,并且每当收到导航图标事件时,都可以检查我们定义的current值。