You don't have to create individual Contextual Action Bar(CAB) for every fragments. You can simply create a single STATIC CAB in the TabbedActivity(Activity with pager) and use them anytime when needed.
Here is my code snippet of TabbedActivity.java
public class TabbedActivity extends AppCompatActivity {
public static ActionMode uniActionMode=null;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {
if(uniActionMode!=null)
uniActionMode.finish();
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
The mViewPager.addOnPageChangeListener
is used to check if the user moves through the fragments. Now all you have to do is create an ActionMode from anywhere and then pass the value to the static uniActionMode
variable.
mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_selection, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete:
mode.finish();
return true;
case R.id.action_mark_read:
mode.finish();
return true;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
};
TabbedActivity.uniActionMode= v.startActionMode(mActionModeCallback);
Here the TabbedActivity.uniActionMode
references the ActionMode Object of the Tabbed Activity. Thus the callbacks are passed to the TabbedActivity.uniActionMode
.