14ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes/*
24ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Copyright (C) 2014 The Android Open Source Project
34ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes *
44ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
54ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * you may not use this file except in compliance with the License.
64ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * You may obtain a copy of the License at
74ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes *
84ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
94ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes *
104ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Unless required by applicable law or agreed to in writing, software
114ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
124ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * See the License for the specific language governing permissions and
144ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * limitations under the License.
154ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes */
164ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
174ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banespackage com.example.android.supportv7.app;
184ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
194ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.os.Bundle;
204ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.Gravity;
214ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.LayoutInflater;
224ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.Menu;
234ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.MenuInflater;
244ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.MenuItem;
254ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.View;
264ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.ViewGroup;
274ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.widget.TextView;
284ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.widget.Toast;
294ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
30def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.Nullable;
31def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.appcompat.app.AppCompatActivity;
32def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.appcompat.widget.Toolbar;
33def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.Fragment;
34def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.FragmentManager;
35def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.FragmentPagerAdapter;
36def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.viewpager.widget.ViewPager;
37def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
38458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikasimport com.example.android.supportv7.R;
39458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikas
404ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport java.util.ArrayList;
414ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport java.util.List;
424ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
434ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes/**
444ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Demonstrates how fragments can participate in the options menu from within a {@link ViewPager}.
454ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes */
4644d25261c2a38c81f1eea123de3986b453b9afeeChris Banespublic class ToolbarFragmentPagerMenu extends AppCompatActivity {
474ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
484ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    @Override
494ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    protected void onCreate(Bundle savedInstanceState) {
504ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        super.onCreate(savedInstanceState);
514ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        setContentView(R.layout.toolbar_fragment_pager);
524ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
53fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        Toolbar toolbar = findViewById(R.id.toolbar);
544ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        setSupportActionBar(toolbar);
554ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
56fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        ViewPager vp = findViewById(R.id.viewpager);
574ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(),
584ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                new MenuFragment(), new Menu2Fragment());
594ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        vp.setAdapter(adapter);
604ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
614ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
624ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    private static class PagerAdapter extends FragmentPagerAdapter {
634ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        private final List<Fragment> mFragments;
644ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
654ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public PagerAdapter(FragmentManager fm, Fragment... fragments) {
664ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            super(fm);
674ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
684ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            mFragments = new ArrayList<Fragment>();
694ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            for (Fragment fragment : fragments) {
704ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                mFragments.add(fragment);
714ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            }
724ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
734ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
744ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
754ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public Fragment getItem(int position) {
764ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            return mFragments.get(position);
774ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
784ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
794ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
804ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public int getCount() {
814ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            return mFragments.size();
824ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
834ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
844ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
854ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    /**
864ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes     * A fragment that displays a menu.  This fragment happens to not
874ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes     * have a UI (it does not implement onCreateView), but it could also
884ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes     * have one if it wanted.
894ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes     */
904ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    public static class MenuFragment extends Fragment {
914ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
924ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public void onCreate(Bundle savedInstanceState) {
934ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            super.onCreate(savedInstanceState);
944ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            setHasOptionsMenu(true);
954ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
964ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
974ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
984ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
99458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikas            menu.add("Menu 1a").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
100458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikas            menu.add("Menu 1b").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
1014ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            super.onCreateOptionsMenu(menu, inflater);
1024ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1034ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1044ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
1054ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
1064ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                @Nullable Bundle savedInstanceState) {
1074ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            TextView textView = new TextView(container.getContext());
1084ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1094ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            textView.setText(getClass().getSimpleName());
1104ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            textView.setGravity(Gravity.CENTER);
1114ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            textView.setLayoutParams(new ViewGroup.LayoutParams(
1124ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
1134ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1144ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            return textView;
1154ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1164ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1174ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
1184ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public boolean onOptionsItemSelected(MenuItem item) {
1194ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            if (item.getTitle().equals("Menu 1a")) {
1204ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                Toast.makeText(getActivity(), "Selected Menu 1a.", Toast.LENGTH_SHORT).show();
1214ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                return true;
1224ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            }
1234ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            if (item.getTitle().equals("Menu 1b")) {
1244ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                Toast.makeText(getActivity(), "Selected Menu 1b.", Toast.LENGTH_SHORT).show();
1254ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                return true;
1264ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            }
1274ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            return super.onOptionsItemSelected(item);
1284ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1294ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
1304ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1314ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    /**
1324ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes     * Second fragment with a menu.
1334ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes     */
1344ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    public static class Menu2Fragment extends Fragment {
1354ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
1364ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public void onCreate(Bundle savedInstanceState) {
1374ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            super.onCreate(savedInstanceState);
1384ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            setHasOptionsMenu(true);
1394ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1404ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1414ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
1424ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
143458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikas            menu.add("Menu 2").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
1444ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1454ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1464ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
1474ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
1484ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                @Nullable Bundle savedInstanceState) {
1494ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            TextView textView = new TextView(container.getContext());
1504ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1514ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            textView.setText(getClass().getSimpleName());
1524ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            textView.setGravity(Gravity.CENTER);
1534ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            textView.setLayoutParams(new ViewGroup.LayoutParams(
1544ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
1554ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1564ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            return textView;
1574ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1584ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1594ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        @Override
1604ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        public boolean onOptionsItemSelected(MenuItem item) {
1614ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            if (item.getTitle().equals("Menu 2")) {
1624ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                Toast.makeText(getActivity(), "Selected Menu 2.", Toast.LENGTH_SHORT).show();
1634ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                return true;
1644ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            }
1654ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            return false;
1664ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1674ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
1684ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes}
169