Android 浮动操作按钮分为两部分
我想在2个片段中放置一个带有2个操作(两个片段相同)的浮动操作按钮(FAB)。问题是我只有一个活动和许多片段(多于这两个)。这样做的最佳方式是什么?在主XML中创建FAB还是在两个片段中复制它 我目前正在开发一个有类似问题的应用程序,下面是我所做的 我从Android Studio导航抽屉活动模板开始(创建新活动并为导航抽屉选择一个)。它在活动的主要内容布局上创建了一个工厂。在这个布局中,我有一个容器,可以在其中交换片段。当我不想让晶圆厂出现时,我会打电话给该活动,然后当我想要它回来时 这要求您知道当前可见的片段,因此在设置片段事务时应提供标记:Android 浮动操作按钮分为两部分,android,android-fragments,floating-action-button,Android,Android Fragments,Floating Action Button,我想在2个片段中放置一个带有2个操作(两个片段相同)的浮动操作按钮(FAB)。问题是我只有一个活动和许多片段(多于这两个)。这样做的最佳方式是什么?在主XML中创建FAB还是在两个片段中复制它 我目前正在开发一个有类似问题的应用程序,下面是我所做的 我从Android Studio导航抽屉活动模板开始(创建新活动并为导航抽屉选择一个)。它在活动的主要内容布局上创建了一个工厂。在这个布局中,我有一个容器,可以在其中交换片段。当我不想让晶圆厂出现时,我会打电话给该活动,然后当我想要它回来时 这要求您
getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, EditTaskFragment.newInstance(true), FRAGMENT_EDIT)
.addToBackStack(null)
.commit();
其中,FRAGMENT\u EDIT
定义为:
private static final String FRAGMENT_EDIT = "edit";
提交事务时,可以调用FABshow
或hide
方法。请注意,这可能还需要您收听“后退”按钮按下事件:
@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(收缩动画),更改图标,然后再次显示(生长动画):
在活动的onCreate
方法中,我为FAB设置了一个单击侦听器,并检查我应该将调用传递给哪个片段:
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;
}
}
});
请注意,我调用的每个片段都公开了活动预期调用的公共方法。我以不同的方式使其工作:在方法onCreateView上的每个片段中,我放置了一个代码,根据片段将FAB的可见性设置为GONE或VISIBLE。getMainActivity().mButton_adicionar.setVisibility(View.VISIBLE);这似乎更简单。
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;
}
}
});