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