我正在制作一个具有一个活动和许多片段的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>
此导航菜单图标将显示在每个片段中。但是,在某些片段中,我想将底部应用程序栏中的导航图标更改为后退按钮/图标。我该如何实现?另外,目前,我在主活动中处理导航图标单击。如果出现后退图标,该如何处理点击?它将如何知道当前片段是什么,以及如何确定后退图标会导致哪个片段?
答案 0 :(得分:0)
如果您查看documentation,您会看到BottomAppBar
从Toolbar
扩展而来,它有一个称为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
值。