VerticalGridFragment.java revision 60e00f895b6f4dd25f181f377adf98e0715be4b6
1739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/* 2739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Copyright (C) 2014 The Android Open Source Project 3739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 4739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * in compliance with the License. You may obtain a copy of the License at 6739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 7739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * http://www.apache.org/licenses/LICENSE-2.0 8739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 9739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License 10739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * or implied. See the License for the specific language governing permissions and limitations under 12739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * the License. 13739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 14739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutpackage android.support.v17.leanback.app; 15739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 162452cde3b8d7cbe62f6eb2fbcbcf9a02448d6891Dake Guimport android.os.Bundle; 17739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.R; 188403619efebe94666c0615c3fc85080a303acf80Dake Guimport android.support.v17.leanback.transition.TransitionHelper; 1989097f67f988ebba714a95e10369665280db0c27Dake Guimport android.support.v17.leanback.util.StateMachine.State; 205d00775a5d3ce3c1fc06c4de0945d1b8f03aadc4Dake Guimport android.support.v17.leanback.widget.BrowseFrameLayout; 212452cde3b8d7cbe62f6eb2fbcbcf9a02448d6891Dake Guimport android.support.v17.leanback.widget.ObjectAdapter; 22d586ba8825b418d9589436725bfdead30f0dc075Dake Guimport android.support.v17.leanback.widget.OnChildLaidOutListener; 23947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.OnItemViewClickedListener; 24947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.OnItemViewSelectedListener; 25947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.Presenter; 26e34cae48707e70442aca13e1b4ab55757292828dDake Guimport android.support.v17.leanback.widget.Row; 27947dbf076cd019e3c26217fbc7aa21e860d68044Dake Guimport android.support.v17.leanback.widget.RowPresenter; 28739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.support.v17.leanback.widget.VerticalGridPresenter; 2925aacd3f5896ec09053739cc731bdbab3a6f2b81Jerome Poichetimport android.util.Log; 30739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.LayoutInflater; 31739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.View; 32739e3805bf2785e6773aede5e2e1643f537305f9Craig Stoutimport android.view.ViewGroup; 33739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 34739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout/** 354c0f3062b5edd9750351068f46e5270bb220091dTim Kilbourn * A fragment for creating leanback vertical grids. 36739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * 374c0f3062b5edd9750351068f46e5270bb220091dTim Kilbourn * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and 38739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * an {@link ObjectAdapter}. 39739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 40786ba352397f44022617411936515fc9eb28d23fDake Gupublic class VerticalGridFragment extends BaseFragment { 4160e00f895b6f4dd25f181f377adf98e0715be4b6Dake Gu static final String TAG = "VerticalGF"; 4299ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas static boolean DEBUG = false; 43739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 44739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private ObjectAdapter mAdapter; 45739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private VerticalGridPresenter mGridPresenter; 4699ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas VerticalGridPresenter.ViewHolder mGridViewHolder; 4799ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas OnItemViewSelectedListener mOnItemViewSelectedListener; 48947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu private OnItemViewClickedListener mOnItemViewClickedListener; 49786ba352397f44022617411936515fc9eb28d23fDake Gu private Object mSceneAfterEntranceTransition; 50739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private int mSelectedPosition = -1; 51739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 52dfb60d0af5d49da05c584d74245c616263f26b65Craig Stout /** 5389097f67f988ebba714a95e10369665280db0c27Dake Gu * State to setEntranceTransitionState(false) 5489097f67f988ebba714a95e10369665280db0c27Dake Gu */ 5589097f67f988ebba714a95e10369665280db0c27Dake Gu final State STATE_SET_ENTRANCE_START_STATE = new State("SET_ENTRANCE_START_STATE") { 5689097f67f988ebba714a95e10369665280db0c27Dake Gu @Override 5789097f67f988ebba714a95e10369665280db0c27Dake Gu public void run() { 5889097f67f988ebba714a95e10369665280db0c27Dake Gu setEntranceTransitionState(false); 5989097f67f988ebba714a95e10369665280db0c27Dake Gu } 6089097f67f988ebba714a95e10369665280db0c27Dake Gu }; 6189097f67f988ebba714a95e10369665280db0c27Dake Gu 6289097f67f988ebba714a95e10369665280db0c27Dake Gu @Override 6389097f67f988ebba714a95e10369665280db0c27Dake Gu void createStateMachineStates() { 6489097f67f988ebba714a95e10369665280db0c27Dake Gu super.createStateMachineStates(); 6589097f67f988ebba714a95e10369665280db0c27Dake Gu mStateMachine.addState(STATE_SET_ENTRANCE_START_STATE); 6689097f67f988ebba714a95e10369665280db0c27Dake Gu } 6789097f67f988ebba714a95e10369665280db0c27Dake Gu 6889097f67f988ebba714a95e10369665280db0c27Dake Gu @Override 6989097f67f988ebba714a95e10369665280db0c27Dake Gu void createStateMachineTransitions() { 7089097f67f988ebba714a95e10369665280db0c27Dake Gu super.createStateMachineTransitions(); 7189097f67f988ebba714a95e10369665280db0c27Dake Gu mStateMachine.addTransition(STATE_ENTRANCE_ON_PREPARED, 7289097f67f988ebba714a95e10369665280db0c27Dake Gu STATE_SET_ENTRANCE_START_STATE, EVT_ON_CREATEVIEW); 7389097f67f988ebba714a95e10369665280db0c27Dake Gu } 7489097f67f988ebba714a95e10369665280db0c27Dake Gu 7589097f67f988ebba714a95e10369665280db0c27Dake Gu /** 76dfb60d0af5d49da05c584d74245c616263f26b65Craig Stout * Sets the grid presenter. 77739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 78739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setGridPresenter(VerticalGridPresenter gridPresenter) { 79739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (gridPresenter == null) { 80739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout throw new IllegalArgumentException("Grid presenter may not be null"); 81739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 82739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter = gridPresenter; 83d586ba8825b418d9589436725bfdead30f0dc075Dake Gu mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener); 84947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu if (mOnItemViewClickedListener != null) { 85947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 86947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 87739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 88739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 89739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 90739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the grid presenter. 91739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 92739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public VerticalGridPresenter getGridPresenter() { 93739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mGridPresenter; 94739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 95739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 96739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 97739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the object adapter for the fragment. 98739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 99739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setAdapter(ObjectAdapter adapter) { 100739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mAdapter = adapter; 101739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout updateAdapter(); 102739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 103739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 104739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 105739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Returns the object adapter. 106739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 107739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public ObjectAdapter getAdapter() { 108739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout return mAdapter; 109739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 110739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 111d586ba8825b418d9589436725bfdead30f0dc075Dake Gu final private OnItemViewSelectedListener mViewSelectedListener = 112947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu new OnItemViewSelectedListener() { 113e34cae48707e70442aca13e1b4ab55757292828dDake Gu @Override 114947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, 115947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu RowPresenter.ViewHolder rowViewHolder, Row row) { 116e34cae48707e70442aca13e1b4ab55757292828dDake Gu int position = mGridViewHolder.getGridView().getSelectedPosition(); 117d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (DEBUG) Log.v(TAG, "grid selected position " + position); 118d586ba8825b418d9589436725bfdead30f0dc075Dake Gu gridOnItemSelected(position); 119947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu if (mOnItemViewSelectedListener != null) { 120947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item, 121947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu rowViewHolder, row); 122947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 123e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 124e34cae48707e70442aca13e1b4ab55757292828dDake Gu }; 125e34cae48707e70442aca13e1b4ab55757292828dDake Gu 126d586ba8825b418d9589436725bfdead30f0dc075Dake Gu final private OnChildLaidOutListener mChildLaidOutListener = 127d586ba8825b418d9589436725bfdead30f0dc075Dake Gu new OnChildLaidOutListener() { 128d586ba8825b418d9589436725bfdead30f0dc075Dake Gu @Override 129d586ba8825b418d9589436725bfdead30f0dc075Dake Gu public void onChildLaidOut(ViewGroup parent, View view, int position, long id) { 130d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (position == 0) { 131d586ba8825b418d9589436725bfdead30f0dc075Dake Gu showOrHideTitle(); 132d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 133d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 134d586ba8825b418d9589436725bfdead30f0dc075Dake Gu }; 135d586ba8825b418d9589436725bfdead30f0dc075Dake Gu 136739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 137739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets an item selection listener. 138947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu */ 139947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) { 140947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mOnItemViewSelectedListener = listener; 141947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 142947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu 14399ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas void gridOnItemSelected(int position) { 144e34cae48707e70442aca13e1b4ab55757292828dDake Gu if (position != mSelectedPosition) { 145e34cae48707e70442aca13e1b4ab55757292828dDake Gu mSelectedPosition = position; 146d586ba8825b418d9589436725bfdead30f0dc075Dake Gu showOrHideTitle(); 147d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 148d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 149d586ba8825b418d9589436725bfdead30f0dc075Dake Gu 15099ec8b0cb375f7e5577ea3ec9f09e6ff7a95de0dAurimas Liutikas void showOrHideTitle() { 151d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition) 152d586ba8825b418d9589436725bfdead30f0dc075Dake Gu == null) { 153d586ba8825b418d9589436725bfdead30f0dc075Dake Gu return; 154d586ba8825b418d9589436725bfdead30f0dc075Dake Gu } 155d586ba8825b418d9589436725bfdead30f0dc075Dake Gu if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) { 156e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout showTitle(true); 157e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout } else { 158e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout showTitle(false); 159e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 160e34cae48707e70442aca13e1b4ab55757292828dDake Gu } 161739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 162739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 163739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets an item clicked listener. 164947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu */ 165947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public void setOnItemViewClickedListener(OnItemViewClickedListener listener) { 166947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mOnItemViewClickedListener = listener; 167947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu if (mGridPresenter != null) { 168947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener); 169947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 170947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 171947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu 172947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu /** 173947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu * Returns the item clicked listener. 174947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu */ 175947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu public OnItemViewClickedListener getOnItemViewClickedListener() { 176947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu return mOnItemViewClickedListener; 177947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu } 178947dbf076cd019e3c26217fbc7aa21e860d68044Dake Gu 179739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 180739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public View onCreateView(LayoutInflater inflater, ViewGroup container, 181739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout Bundle savedInstanceState) { 182e34cae48707e70442aca13e1b4ab55757292828dDake Gu ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment, 183e34cae48707e70442aca13e1b4ab55757292828dDake Gu container, false); 184a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu ViewGroup gridFrame = (ViewGroup) root.findViewById(R.id.grid_frame); 185a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu installTitleView(inflater, gridFrame, savedInstanceState); 186684f4a94f6f55b2abc5ed2677dfdfc9501dd6407susnata getProgressBarManager().setRootView(root); 1879020c0aec57b4e8994d66b7cd1a89c225e9bfa11Craig Stout 18889097f67f988ebba714a95e10369665280db0c27Dake Gu ViewGroup gridDock = (ViewGroup) root.findViewById(R.id.browse_grid_dock); 189739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock); 190739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout gridDock.addView(mGridViewHolder.view); 191d586ba8825b418d9589436725bfdead30f0dc075Dake Gu mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener); 192739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 1938403619efebe94666c0615c3fc85080a303acf80Dake Gu mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() { 194786ba352397f44022617411936515fc9eb28d23fDake Gu @Override 195786ba352397f44022617411936515fc9eb28d23fDake Gu public void run() { 196786ba352397f44022617411936515fc9eb28d23fDake Gu setEntranceTransitionState(true); 197786ba352397f44022617411936515fc9eb28d23fDake Gu } 198786ba352397f44022617411936515fc9eb28d23fDake Gu }); 199786ba352397f44022617411936515fc9eb28d23fDake Gu 200739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout updateAdapter(); 20189097f67f988ebba714a95e10369665280db0c27Dake Gu return root; 202739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 203739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 204e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout private void setupFocusSearchListener() { 205e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById( 206e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout R.id.grid_frame); 207e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener()); 208e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout } 209e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout 210739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 211739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onStart() { 212739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super.onStart(); 213e7246ef136ed686d8caf339d4d1fd8e37b499c6aCraig Stout setupFocusSearchListener(); 214739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 215739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 216739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout @Override 217739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void onDestroyView() { 218739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout super.onDestroyView(); 219739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder = null; 220739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 221739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 222739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout /** 223739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout * Sets the selected item position. 224739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout */ 225739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout public void setSelectedPosition(int position) { 226739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mSelectedPosition = position; 227739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) { 228739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().setSelectedPositionSmooth(position); 229739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 230739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 231739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout 232739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout private void updateAdapter() { 233739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mGridViewHolder != null) { 234739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter); 235739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout if (mSelectedPosition != -1) { 236739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition); 237739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 238739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 239739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout } 240786ba352397f44022617411936515fc9eb28d23fDake Gu 241786ba352397f44022617411936515fc9eb28d23fDake Gu @Override 242786ba352397f44022617411936515fc9eb28d23fDake Gu protected Object createEntranceTransition() { 2432452cde3b8d7cbe62f6eb2fbcbcf9a02448d6891Dake Gu return TransitionHelper.loadTransition(FragmentUtil.getContext(this), 244786ba352397f44022617411936515fc9eb28d23fDake Gu R.transition.lb_vertical_grid_entrance_transition); 245786ba352397f44022617411936515fc9eb28d23fDake Gu } 246786ba352397f44022617411936515fc9eb28d23fDake Gu 247786ba352397f44022617411936515fc9eb28d23fDake Gu @Override 248786ba352397f44022617411936515fc9eb28d23fDake Gu protected void runEntranceTransition(Object entranceTransition) { 2498403619efebe94666c0615c3fc85080a303acf80Dake Gu TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition); 250786ba352397f44022617411936515fc9eb28d23fDake Gu } 251786ba352397f44022617411936515fc9eb28d23fDake Gu 252786ba352397f44022617411936515fc9eb28d23fDake Gu void setEntranceTransitionState(boolean afterTransition) { 253786ba352397f44022617411936515fc9eb28d23fDake Gu mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition); 254786ba352397f44022617411936515fc9eb28d23fDake Gu } 255739e3805bf2785e6773aede5e2e1643f537305f9Craig Stout} 256