1d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette/*
2d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * Copyright (C) 2015 The Android Open Source Project
3d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette *
4d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * Licensed under the Apache License, Version 2.0 (the "License");
5d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * you may not use this file except in compliance with the License.
6d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * You may obtain a copy of the License at
7d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette *
8d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette *      http://www.apache.org/licenses/LICENSE-2.0
9d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette *
10d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * Unless required by applicable law or agreed to in writing, software
11d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * distributed under the License is distributed on an "AS IS" BASIS,
12d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * See the License for the specific language governing permissions and
14d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette * limitations under the License.
15d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette */
16d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
17d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverettepackage com.example.android.supportv4.view;
18d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
19d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport android.app.Activity;
20d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport android.graphics.Color;
21d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport android.os.Bundle;
22d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport android.util.Pair;
23d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport android.view.View;
24d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport android.view.ViewGroup;
25d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
26def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.viewpager.widget.PagerAdapter;
27def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.viewpager.widget.PagerTitleStrip;
28def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.viewpager.widget.ViewPager;
29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
30abc73958d264e1eed7fd401a18be1d9ede8304ebAurimas Liutikasimport com.example.android.supportv4.R;
31abc73958d264e1eed7fd401a18be1d9ede8304ebAurimas Liutikas
32d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viveretteimport java.util.ArrayList;
33d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
34d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverettepublic class ViewPagerActivity extends Activity {
35d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    private ViewPager mPager;
36d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    private PagerTitleStrip mTitles;
37d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    private ColorPagerAdapter mAdapter;
38d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
39d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    @Override
40d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    protected void onCreate(Bundle savedInstanceState) {
41d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        super.onCreate(savedInstanceState);
42d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
43d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        setContentView(R.layout.view_pager_layout);
44d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
45d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        mAdapter = new ColorPagerAdapter();
46d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        mAdapter.add("Red", Color.RED);
47d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        mAdapter.add("Green", Color.GREEN);
48d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        mAdapter.add("Blue", Color.BLUE);
49d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
50fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mPager = findViewById(R.id.pager);
51d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        mPager.setAdapter(mAdapter);
52d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
53fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mTitles = findViewById(R.id.titles);
54d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    }
55d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
56d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    private static class ColorPagerAdapter extends PagerAdapter {
57d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        private ArrayList<Pair<String, Integer>> mEntries = new ArrayList<>();
58d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
59d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public void add(String title, int color) {
60abc73958d264e1eed7fd401a18be1d9ede8304ebAurimas Liutikas            mEntries.add(new Pair<>(title, color));
61d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
62d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
63d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        @Override
64d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public int getCount() {
65d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            return mEntries.size();
66d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
67d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
68d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        @Override
69d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public Object instantiateItem(ViewGroup container, int position) {
70d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            final View view = new View(container.getContext());
71d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            view.setBackgroundColor(mEntries.get(position).second);
72d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
73d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            // Unlike ListView adapters, the ViewPager adapter is responsible
74d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            // for adding the view to the container.
75d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            container.addView(view);
76d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
77d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            return new ViewHolder(view, position);
78d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
79d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
80d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        @Override
81d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public void destroyItem(ViewGroup container, int position, Object object) {
82d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            // The adapter is also responsible for removing the view.
83d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            container.removeView(((ViewHolder) object).view);
84d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
85d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
86d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        @Override
87d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public int getItemPosition(Object object) {
88d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            return ((ViewHolder) object).position;
89d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
90d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
91d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        @Override
92d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public boolean isViewFromObject(View view, Object object) {
93d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            return ((ViewHolder) object).view == view;
94d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
95d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
96d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        @Override
97d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        public CharSequence getPageTitle(int position) {
98d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            return mEntries.get(position).first;
99d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
100d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
101d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        private static class ViewHolder {
102d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            final View view;
103d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            final int position;
104d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette
105d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            public ViewHolder(View view, int position) {
106d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette                this.view = view;
107d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette                this.position = position;
108d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette            }
109d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette        }
110d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette    }
111d4b4cd97d3f4af35bdc90f64ce37e4958a39f3b0Alan Viverette}
112