blob: f79bffabc86b9fc89695ef316d0626cb054d323f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package de.danoeh.antennapod.fragment;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
/**
* Fragment with a ViewPager where the displayed items influence the top toolbar's menu.
* All items share the same general menu items and are just allowed to show/hide them.
*/
public abstract class PagedToolbarFragment extends Fragment {
private Toolbar toolbar;
private ViewPager2 viewPager;
/**
* Invalidate the toolbar menu if the current child fragment is visible.
* @param child The fragment to invalidate
*/
void invalidateOptionsMenuIfActive(@NonNull Fragment child) {
Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
if (visibleChild == child) {
visibleChild.onPrepareOptionsMenu(toolbar.getMenu());
}
}
protected void setupPagedToolbar(Toolbar toolbar, ViewPager2 viewPager) {
this.toolbar = toolbar;
this.viewPager = viewPager;
toolbar.setOnMenuItemClickListener(item -> {
Fragment child = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
if (child != null) {
return child.onOptionsItemSelected(item);
}
return false;
});
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
Fragment child = getChildFragmentManager().findFragmentByTag("f" + position);
if (child != null) {
child.onPrepareOptionsMenu(toolbar.getMenu());
}
}
});
}
}
|