10157041980358a806cf32e53bd814347aa155231Romain Guy/* 20157041980358a806cf32e53bd814347aa155231Romain Guy * Copyright (C) 2011 The Android Open Source Project 30157041980358a806cf32e53bd814347aa155231Romain Guy * 40157041980358a806cf32e53bd814347aa155231Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 50157041980358a806cf32e53bd814347aa155231Romain Guy * you may not use this file except in compliance with the License. 60157041980358a806cf32e53bd814347aa155231Romain Guy * You may obtain a copy of the License at 70157041980358a806cf32e53bd814347aa155231Romain Guy * 80157041980358a806cf32e53bd814347aa155231Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 90157041980358a806cf32e53bd814347aa155231Romain Guy * 100157041980358a806cf32e53bd814347aa155231Romain Guy * Unless required by applicable law or agreed to in writing, software 110157041980358a806cf32e53bd814347aa155231Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 120157041980358a806cf32e53bd814347aa155231Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130157041980358a806cf32e53bd814347aa155231Romain Guy * See the License for the specific language governing permissions and 140157041980358a806cf32e53bd814347aa155231Romain Guy * limitations under the License. 150157041980358a806cf32e53bd814347aa155231Romain Guy */ 160157041980358a806cf32e53bd814347aa155231Romain Guy 170157041980358a806cf32e53bd814347aa155231Romain Guypackage com.example.android.supportv4.app; 180157041980358a806cf32e53bd814347aa155231Romain Guy 1967949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikasimport android.os.Bundle; 200157041980358a806cf32e53bd814347aa155231Romain Guyimport android.view.LayoutInflater; 210157041980358a806cf32e53bd814347aa155231Romain Guyimport android.view.View; 220157041980358a806cf32e53bd814347aa155231Romain Guyimport android.view.View.OnClickListener; 2367949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikasimport android.view.ViewGroup; 240157041980358a806cf32e53bd814347aa155231Romain Guyimport android.widget.Button; 250157041980358a806cf32e53bd814347aa155231Romain Guyimport android.widget.TextView; 260157041980358a806cf32e53bd814347aa155231Romain Guy 27def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.content.ContextCompat; 28def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.view.ViewCompat; 29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.Fragment; 30def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.FragmentActivity; 31def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.FragmentTransaction; 32def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas 3367949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikasimport com.example.android.supportv4.R; 3467949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikas 350157041980358a806cf32e53bd814347aa155231Romain Guypublic class FragmentCustomAnimationSupport extends FragmentActivity { 360157041980358a806cf32e53bd814347aa155231Romain Guy int mStackLevel = 1; 370157041980358a806cf32e53bd814347aa155231Romain Guy 380157041980358a806cf32e53bd814347aa155231Romain Guy @Override 390157041980358a806cf32e53bd814347aa155231Romain Guy protected void onCreate(Bundle savedInstanceState) { 400157041980358a806cf32e53bd814347aa155231Romain Guy super.onCreate(savedInstanceState); 410157041980358a806cf32e53bd814347aa155231Romain Guy setContentView(R.layout.fragment_stack); 420157041980358a806cf32e53bd814347aa155231Romain Guy 430157041980358a806cf32e53bd814347aa155231Romain Guy // Watch for button clicks. 44fa2e2acf79d791a90410025daad438968550d18cAlan Viverette Button button = findViewById(R.id.new_fragment); 450157041980358a806cf32e53bd814347aa155231Romain Guy button.setOnClickListener(new OnClickListener() { 46e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 470157041980358a806cf32e53bd814347aa155231Romain Guy public void onClick(View v) { 480157041980358a806cf32e53bd814347aa155231Romain Guy addFragmentToStack(); 490157041980358a806cf32e53bd814347aa155231Romain Guy } 500157041980358a806cf32e53bd814347aa155231Romain Guy }); 510157041980358a806cf32e53bd814347aa155231Romain Guy 520157041980358a806cf32e53bd814347aa155231Romain Guy if (savedInstanceState == null) { 530157041980358a806cf32e53bd814347aa155231Romain Guy // Do first time initialization -- add initial fragment. 540157041980358a806cf32e53bd814347aa155231Romain Guy Fragment newFragment = CountingFragment.newInstance(mStackLevel); 550157041980358a806cf32e53bd814347aa155231Romain Guy FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 560157041980358a806cf32e53bd814347aa155231Romain Guy ft.add(R.id.simple_fragment, newFragment).commit(); 570157041980358a806cf32e53bd814347aa155231Romain Guy } else { 580157041980358a806cf32e53bd814347aa155231Romain Guy mStackLevel = savedInstanceState.getInt("level"); 590157041980358a806cf32e53bd814347aa155231Romain Guy } 600157041980358a806cf32e53bd814347aa155231Romain Guy } 610157041980358a806cf32e53bd814347aa155231Romain Guy 620157041980358a806cf32e53bd814347aa155231Romain Guy @Override 630157041980358a806cf32e53bd814347aa155231Romain Guy public void onSaveInstanceState(Bundle outState) { 640157041980358a806cf32e53bd814347aa155231Romain Guy super.onSaveInstanceState(outState); 650157041980358a806cf32e53bd814347aa155231Romain Guy outState.putInt("level", mStackLevel); 660157041980358a806cf32e53bd814347aa155231Romain Guy } 670157041980358a806cf32e53bd814347aa155231Romain Guy 680157041980358a806cf32e53bd814347aa155231Romain Guy//BEGIN_INCLUDE(add_stack) 690157041980358a806cf32e53bd814347aa155231Romain Guy void addFragmentToStack() { 700157041980358a806cf32e53bd814347aa155231Romain Guy mStackLevel++; 710157041980358a806cf32e53bd814347aa155231Romain Guy 720157041980358a806cf32e53bd814347aa155231Romain Guy // Instantiate a new fragment. 730157041980358a806cf32e53bd814347aa155231Romain Guy Fragment newFragment = CountingFragment.newInstance(mStackLevel); 740157041980358a806cf32e53bd814347aa155231Romain Guy 750157041980358a806cf32e53bd814347aa155231Romain Guy // Add the fragment to the activity, pushing this transaction 760157041980358a806cf32e53bd814347aa155231Romain Guy // on to the back stack. 770157041980358a806cf32e53bd814347aa155231Romain Guy FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 780157041980358a806cf32e53bd814347aa155231Romain Guy ft.setCustomAnimations(R.anim.fragment_slide_left_enter, 790157041980358a806cf32e53bd814347aa155231Romain Guy R.anim.fragment_slide_left_exit, 800157041980358a806cf32e53bd814347aa155231Romain Guy R.anim.fragment_slide_right_enter, 810157041980358a806cf32e53bd814347aa155231Romain Guy R.anim.fragment_slide_right_exit); 820157041980358a806cf32e53bd814347aa155231Romain Guy ft.replace(R.id.simple_fragment, newFragment); 830157041980358a806cf32e53bd814347aa155231Romain Guy ft.addToBackStack(null); 840157041980358a806cf32e53bd814347aa155231Romain Guy ft.commit(); 850157041980358a806cf32e53bd814347aa155231Romain Guy } 860157041980358a806cf32e53bd814347aa155231Romain Guy//END_INCLUDE(add_stack) 870157041980358a806cf32e53bd814347aa155231Romain Guy 880157041980358a806cf32e53bd814347aa155231Romain Guy//BEGIN_INCLUDE(fragment) 890157041980358a806cf32e53bd814347aa155231Romain Guy public static class CountingFragment extends Fragment { 900157041980358a806cf32e53bd814347aa155231Romain Guy int mNum; 910157041980358a806cf32e53bd814347aa155231Romain Guy 920157041980358a806cf32e53bd814347aa155231Romain Guy /** 930157041980358a806cf32e53bd814347aa155231Romain Guy * Create a new instance of CountingFragment, providing "num" 940157041980358a806cf32e53bd814347aa155231Romain Guy * as an argument. 950157041980358a806cf32e53bd814347aa155231Romain Guy */ 960157041980358a806cf32e53bd814347aa155231Romain Guy static CountingFragment newInstance(int num) { 970157041980358a806cf32e53bd814347aa155231Romain Guy CountingFragment f = new CountingFragment(); 980157041980358a806cf32e53bd814347aa155231Romain Guy 990157041980358a806cf32e53bd814347aa155231Romain Guy // Supply num input as an argument. 1000157041980358a806cf32e53bd814347aa155231Romain Guy Bundle args = new Bundle(); 1010157041980358a806cf32e53bd814347aa155231Romain Guy args.putInt("num", num); 1020157041980358a806cf32e53bd814347aa155231Romain Guy f.setArguments(args); 1030157041980358a806cf32e53bd814347aa155231Romain Guy 1040157041980358a806cf32e53bd814347aa155231Romain Guy return f; 1050157041980358a806cf32e53bd814347aa155231Romain Guy } 1060157041980358a806cf32e53bd814347aa155231Romain Guy 1070157041980358a806cf32e53bd814347aa155231Romain Guy /** 1080157041980358a806cf32e53bd814347aa155231Romain Guy * When creating, retrieve this instance's number from its arguments. 1090157041980358a806cf32e53bd814347aa155231Romain Guy */ 1100157041980358a806cf32e53bd814347aa155231Romain Guy @Override 1110157041980358a806cf32e53bd814347aa155231Romain Guy public void onCreate(Bundle savedInstanceState) { 1120157041980358a806cf32e53bd814347aa155231Romain Guy super.onCreate(savedInstanceState); 1130157041980358a806cf32e53bd814347aa155231Romain Guy mNum = getArguments() != null ? getArguments().getInt("num") : 1; 1140157041980358a806cf32e53bd814347aa155231Romain Guy } 1150157041980358a806cf32e53bd814347aa155231Romain Guy 1160157041980358a806cf32e53bd814347aa155231Romain Guy /** 1170157041980358a806cf32e53bd814347aa155231Romain Guy * The Fragment's UI is just a simple text view showing its 1180157041980358a806cf32e53bd814347aa155231Romain Guy * instance number. 1190157041980358a806cf32e53bd814347aa155231Romain Guy */ 1200157041980358a806cf32e53bd814347aa155231Romain Guy @Override 1210157041980358a806cf32e53bd814347aa155231Romain Guy public View onCreateView(LayoutInflater inflater, ViewGroup container, 1220157041980358a806cf32e53bd814347aa155231Romain Guy Bundle savedInstanceState) { 1230157041980358a806cf32e53bd814347aa155231Romain Guy View v = inflater.inflate(R.layout.hello_world, container, false); 1240157041980358a806cf32e53bd814347aa155231Romain Guy View tv = v.findViewById(R.id.text); 12567949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikas ((TextView) tv).setText("Fragment #" + mNum); 12667949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikas ViewCompat.setBackground(tv, 12767949f5f3bc1f721fa5f63250f0fd74a44f5381fAurimas Liutikas ContextCompat.getDrawable(getContext(), android.R.drawable.gallery_thumb)); 1280157041980358a806cf32e53bd814347aa155231Romain Guy return v; 1290157041980358a806cf32e53bd814347aa155231Romain Guy } 1300157041980358a806cf32e53bd814347aa155231Romain Guy } 1310157041980358a806cf32e53bd814347aa155231Romain Guy//END_INCLUDE(fragment) 1320157041980358a806cf32e53bd814347aa155231Romain Guy} 133