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