Skip to content

Most visited

Recently visited

navigation
HorizontalPaging / src / com.example.android.horizontalpaging /

MainActivity.java

1
package com.example.android.horizontalpaging;
2
 
3
import android.app.ActionBar;
4
import android.app.FragmentTransaction;
5
import android.os.Bundle;
6
import android.support.v4.app.Fragment;
7
import android.support.v4.app.FragmentActivity;
8
import android.support.v4.app.FragmentManager;
9
import android.support.v4.app.FragmentPagerAdapter;
10
import android.support.v4.view.ViewPager;
11
import android.view.LayoutInflater;
12
import android.view.View;
13
import android.view.ViewGroup;
14
import android.widget.TextView;
15
 
16
import java.util.Locale;
17
 
18
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
19
 
20
    /**
21
     * The {@link android.support.v4.view.PagerAdapter} that will provide
22
     * fragments for each of the sections. We use a
23
     * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
24
     * will keep every loaded fragment in memory. If this becomes too memory
25
     * intensive, it may be best to switch to a
26
     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
27
     */
28
    SectionsPagerAdapter mSectionsPagerAdapter;
29
 
30
    /**
31
     * The {@link ViewPager} that will host the section contents.
32
     */
33
    ViewPager mViewPager;
34
 
35
    /**
36
     * Create the activity. Sets up an {@link android.app.ActionBar} with tabs, and then configures the
37
     * {@link ViewPager} contained inside R.layout.activity_main.
38
     *
39
     * <p>A {@link SectionsPagerAdapter} will be instantiated to hold the different pages of
40
     * fragments that are to be displayed. A
41
     * {@link android.support.v4.view.ViewPager.SimpleOnPageChangeListener} will also be configured
42
     * to receive callbacks when the user swipes between pages in the ViewPager.
43
     *
44
     * @param savedInstanceState
45
     */
46
    @Override
47
    protected void onCreate(Bundle savedInstanceState) {
48
        super.onCreate(savedInstanceState);
49
        // Load the UI from res/layout/activity_main.xml
50
        setContentView(R.layout.sample_main);
51
 
52
        // Set up the action bar. The navigation mode is set to NAVIGATION_MODE_TABS, which will
53
        // cause the ActionBar to render a set of tabs. Note that these tabs are *not* rendered
54
        // by the ViewPager; additional logic is lower in this file to synchronize the ViewPager
55
        // state with the tab state. (See mViewPager.setOnPageChangeListener() and onTabSelected().)
57
        final ActionBar actionBar = getActionBar();
58
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
60
 
62
        // Create the adapter that will return a fragment for each of the three primary sections
63
        // of the app.
64
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
65
 
66
        // Set up the ViewPager with the sections adapter.
67
        mViewPager = (ViewPager) findViewById(R.id.pager);
68
        mViewPager.setAdapter(mSectionsPagerAdapter);
70
 
71
        // When swiping between different sections, select the corresponding tab. We can also use
72
        // ActionBar.Tab#select() to do this if we have a reference to the Tab.
74
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
75
            @Override
76
            public void onPageSelected(int position) {
77
                actionBar.setSelectedNavigationItem(position);
78
            }
79
        });
81
 
83
        // For each of the sections in the app, add a tab to the action bar.
84
        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
85
            // Create a tab with text corresponding to the page title defined by the adapter. Also
86
            // specify this Activity object, which implements the TabListener interface, as the
87
            // callback (listener) for when this tab is selected.
88
            actionBar.addTab(
89
                    actionBar.newTab()
90
                            .setText(mSectionsPagerAdapter.getPageTitle(i))
91
                            .setTabListener(this));
92
        }
94
    }
95
 
96
    /**
97
     * Update {@link ViewPager} after a tab has been selected in the ActionBar.
98
     *
99
     * @param tab Tab that was selected.
100
     * @param fragmentTransaction A {@link android.app.FragmentTransaction} for queuing fragment operations to
101
     *                            execute once this method returns. This FragmentTransaction does
102
     *                            not support being added to the back stack.
103
     */
105
    @Override
106
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
107
        // When the given tab is selected, tell the ViewPager to switch to the corresponding page.
108
        mViewPager.setCurrentItem(tab.getPosition());
109
    }
111
 
112
    /**
113
     * Unused. Required for {@link android.app.ActionBar.TabListener}.
114
     */
115
    @Override
116
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
117
    }
118
 
119
    /**
120
     * Unused. Required for {@link android.app.ActionBar.TabListener}.
121
     */
122
    @Override
123
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
124
    }
125
 
127
    /**
128
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
129
     * one of the sections/tabs/pages. This provides the data for the {@link ViewPager}.
130
     */
131
    public class SectionsPagerAdapter extends FragmentPagerAdapter {
133
 
134
        public SectionsPagerAdapter(FragmentManager fm) {
135
            super(fm);
136
        }
137
 
139
        /**
140
         * Get fragment corresponding to a specific position. This will be used to populate the
141
         * contents of the {@link ViewPager}.
142
         *
143
         * @param position Position to fetch fragment for.
144
         * @return Fragment for specified position.
145
         */
146
        @Override
147
        public Fragment getItem(int position) {
148
            // getItem is called to instantiate the fragment for the given page.
149
            // Return a DummySectionFragment (defined as a static inner class
150
            // below) with the page number as its lone argument.
151
            Fragment fragment = new DummySectionFragment();
152
            Bundle args = new Bundle();
153
            args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
154
            fragment.setArguments(args);
155
            return fragment;
156
        }
158
 
160
        /**
161
         * Get number of pages the {@link ViewPager} should render.
162
         *
163
         * @return Number of fragments to be rendered as pages.
164
         */
165
        @Override
166
        public int getCount() {
167
            // Show 3 total pages.
168
            return 3;
169
        }
171
 
173
        /**
174
         * Get title for each of the pages. This will be displayed on each of the tabs.
175
         *
176
         * @param position Page to fetch title for.
177
         * @return Title for specified page.
178
         */
179
        @Override
180
        public CharSequence getPageTitle(int position) {
181
            Locale l = Locale.getDefault();
182
            switch (position) {
183
                case 0:
184
                    return getString(R.string.title_section1).toUpperCase(l);
185
                case 1:
186
                    return getString(R.string.title_section2).toUpperCase(l);
187
                case 2:
188
                    return getString(R.string.title_section3).toUpperCase(l);
189
            }
190
            return null;
191
        }
193
    }
194
 
195
    /**
196
     * A dummy fragment representing a section of the app, but that simply displays dummy text.
197
     * This would be replaced with your application's content.
198
     */
199
    public static class DummySectionFragment extends Fragment {
200
        /**
201
         * The fragment argument representing the section number for this
202
         * fragment.
203
         */
204
        public static final String ARG_SECTION_NUMBER = "section_number";
205
 
206
        public DummySectionFragment() {
207
        }
208
 
209
        @Override
210
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
211
                Bundle savedInstanceState) {
212
            View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false);
213
            TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);
214
            dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
215
            return rootView;
216
        }
217
    }
218
 
219
}
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.