gpt4 book ai didi

android - 两个 fragment 中的 float 操作按钮

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:19 24 4
gpt4 key购买 nike

我想在 2 个 fragment 中放置一个带有 2 个 Action (两个 fragment 都相同)的 float Action 按钮 (FAB)。问题是我只有一个 Activity 和许多 Fragments(超过这 2 个)。这样做的最佳方法是什么?在主 XML 中创建 FAB 还是在两个 fragment 中复制它?

最佳答案

我目前正在开发一款存在类似问题的应用,以下是我所做的。

我从 Android Studio 抽屉导航 Activity 模板开始(创建新 Activity 并为抽屉导航选择一个 Activity )。它在 Activity 的主要内容布局之上创建了一个 FAB。在该布局中,我有一个容器,我可以在其中交换 fragment 。当我不想显示 FAB 时,我会调用 FloatingActionButton.hide(...)在 Activity 中,然后是 FloatingActionButton.show()当我想要它的时候。

这需要您知道哪个 Fragment 当前可见,因此您应该在设置 Fragment 交易时提供标签:

getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, EditTaskFragment.newInstance(true), FRAGMENT_EDIT)
.addToBackStack(null)
.commit();

FRAGMENT_EDIT 定义为:

private static final String FRAGMENT_EDIT = "edit";

当您提交事务时,您可以调用 FAB showhide 方法。请注意,这可能还需要您监听后退按钮按下事件:

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
if (getFragmentManager().getBackStackEntryCount() > 0){
EditTaskFragment editFragment = (EditTaskFragment)getFragmentManager().findFragmentByTag(FRAGMENT_EDIT);
if (editFragment != null && editFragment.isVisible()) {
// coming back from edit, reset fab to add icon
setFabIcon(R.drawable.ic_add_24dp);
}
getFragmentManager().popBackStack();
} else if(null == mTaskFragment || !mTaskFragment.cancelRefreshData()) {
super.onBackPressed();
}
}
}

setFabIcon 用于隐藏FAB(缩小动画),改变图标,再显示(放大动画):

private void setFabIcon(final int resId) {
fab.hide(new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onHidden(FloatingActionButton fab) {
fab.setImageResource(resId);
fab.show();
}
});
}

在 Activity 的 onCreate 方法中,我为 FAB 设置了一个点击监听器,并检查我应该将调用传递给哪个 fragment :

fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Fragment currentFragment = getFragmentManager().findFragmentById(R.id.fragment_container);
String tag = currentFragment.getTag();
switch (tag) {
case FRAGMENT_TASKS:
Snackbar.make(view, "Task creation is...under construction", Snackbar.LENGTH_LONG).show();
break;
case FRAGMENT_TURNS:
((TurnFragment) currentFragment).takeTurn(view);
break;
case FRAGMENT_EDIT:
((EditTaskFragment) currentFragment).saveTask();
break;
default:
Log.e(TAG, "Unhandled FAB fragment tag " + tag);
Snackbar.make(view, "Not sure what to do...my bad", Snackbar.LENGTH_SHORT).show();
break;
}
}
});

请注意,我调用的每个 fragment 都公开了 Activity 应调用的公共(public)方法。

关于android - 两个 fragment 中的 float 操作按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com