public class DetailsFragment extends BrandedFragment
A DetailsFragment renders the elements of its ObjectAdapter
as a set
of rows in a vertical list.The Adapter's PresenterSelector
must maintain subclasses
of RowPresenter
.
FullWidthDetailsOverviewRowPresenter
is found in adapter, DetailsFragment will
setup default behavior of the DetailsOverviewRow:
setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter)
.
onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter,
FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int)
.
The recommended activity themes to use with a DetailsFragment are
android.support.v17.leanback.R.style#Theme_Leanback_Details
with activity
shared element transition for FullWidthDetailsOverviewRowPresenter
.
android.support.v17.leanback.R.style#Theme_Leanback_Details_NoSharedElementTransition
if shared element transition is not needed, for example if first row is not rendered by
FullWidthDetailsOverviewRowPresenter
.
Fragment.InstantiationException, Fragment.SavedState
TRIM_MEMORY_BACKGROUND, TRIM_MEMORY_COMPLETE, TRIM_MEMORY_MODERATE, TRIM_MEMORY_RUNNING_CRITICAL, TRIM_MEMORY_RUNNING_LOW, TRIM_MEMORY_RUNNING_MODERATE, TRIM_MEMORY_UI_HIDDEN
Constructor and Description |
---|
DetailsFragment() |
Modifier and Type | Method and Description |
---|---|
protected Object |
createEntranceTransition()
Create entrance transition.
|
ObjectAdapter |
getAdapter()
Returns the list of rows.
|
BaseOnItemViewClickedListener |
getOnItemViewClickedListener()
Returns the item clicked listener.
|
ProgressBarManager |
getProgressBarManager()
Returns the
ProgressBarManager . |
RowsFragment |
getRowsFragment()
Gets embedded RowsFragment showing multiple rows for DetailsFragment.
|
protected View |
inflateTitle(LayoutInflater inflater,
ViewGroup parent,
Bundle savedInstanceState)
Deprecated.
override
onInflateTitleView(LayoutInflater,ViewGroup,Bundle) instead. |
void |
onCreate(Bundle savedInstanceState)
Called to do initial creation of a fragment.
|
View |
onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState)
Called to have the fragment instantiate its user interface view.
|
protected void |
onEntranceTransitionEnd()
Callback when entrance transition is ended.
|
protected void |
onEntranceTransitionPrepare()
Callback when entrance transition is prepared.
|
protected void |
onEntranceTransitionStart()
Callback when entrance transition is started.
|
View |
onInflateTitleView(LayoutInflater inflater,
ViewGroup parent,
Bundle savedInstanceState)
Called by
BrandedFragment.installTitleView(LayoutInflater, ViewGroup, Bundle) to inflate
title view. |
protected void |
onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,
FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder,
int adapterPosition,
int selectedPosition,
int selectedSubPosition)
Called to change DetailsOverviewRow view status when current selected row position
or selected sub position changed.
|
protected void |
onSetRowStatus(RowPresenter presenter,
RowPresenter.ViewHolder viewHolder,
int adapterPosition,
int selectedPosition,
int selectedSubPosition)
Called on every visible row to change view status when current selected row position
or selected sub position changed.
|
void |
onStart()
Called when the Fragment is visible to the user.
|
void |
onViewCreated(View view,
Bundle savedInstanceState)
Called immediately after
Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle)
has returned, but before any saved state has been restored in to the view. |
void |
prepareEntranceTransition()
Enables entrance transition.
|
protected void |
runEntranceTransition(Object entranceTransition)
Run entrance transition.
|
void |
setAdapter(ObjectAdapter adapter)
Sets the list of rows for the fragment.
|
void |
setOnItemViewClickedListener(BaseOnItemViewClickedListener listener)
Sets an item clicked listener.
|
void |
setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener)
Sets an item selection listener.
|
void |
setSelectedPosition(int position)
Sets the selected row position with smooth animation.
|
void |
setSelectedPosition(int position,
boolean smooth)
Sets the selected row position.
|
protected void |
setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter)
Called to setup
FullWidthDetailsOverviewRowPresenter . |
protected void |
setupPresenter(Presenter rowPresenter)
Called to setup each Presenter of Adapter passed in
setAdapter(ObjectAdapter) . |
void |
startEntranceTransition()
When fragment finishes loading data, it should call startEntranceTransition()
to execute the entrance transition.
|
getBadgeDrawable, getSearchAffordanceColor, getSearchAffordanceColors, getTitle, getTitleView, getTitleViewAdapter, installTitleView, isShowingTitle, onDestroyView, onPause, onResume, onSaveInstanceState, setBadgeDrawable, setOnSearchClickedListener, setSearchAffordanceColor, setSearchAffordanceColors, setTitle, setTitleView, showTitle, showTitle
dump, equals, getActivity, getAllowEnterTransitionOverlap, getAllowReturnTransitionOverlap, getArguments, getChildFragmentManager, getContext, getEnterTransition, getExitTransition, getFragmentManager, getHost, getId, getLayoutInflater, getLoaderManager, getParentFragment, getReenterTransition, getResources, getRetainInstance, getReturnTransition, getSharedElementEnterTransition, getSharedElementReturnTransition, getString, getString, getTag, getTargetFragment, getTargetRequestCode, getText, getUserVisibleHint, getView, hashCode, instantiate, instantiate, isAdded, isDetached, isHidden, isInLayout, isRemoving, isResumed, isVisible, onActivityCreated, onActivityResult, onAttach, onAttach, onAttachFragment, onConfigurationChanged, onContextItemSelected, onCreateAnimator, onCreateContextMenu, onCreateOptionsMenu, onDestroy, onDestroyOptionsMenu, onDetach, onHiddenChanged, onInflate, onInflate, onInflate, onLowMemory, onMultiWindowModeChanged, onOptionsItemSelected, onOptionsMenuClosed, onPictureInPictureModeChanged, onPrepareOptionsMenu, onRequestPermissionsResult, onStop, onTrimMemory, onViewStateRestored, registerForContextMenu, requestPermissions, setAllowEnterTransitionOverlap, setAllowReturnTransitionOverlap, setArguments, setEnterSharedElementCallback, setEnterSharedElementTransitionCallback, setEnterTransition, setExitSharedElementCallback, setExitSharedElementTransitionCallback, setExitTransition, setHasOptionsMenu, setInitialSavedState, setMenuVisibility, setReenterTransition, setRetainInstance, setReturnTransition, setSharedElementEnterTransition, setSharedElementReturnTransition, setTargetFragment, setUserVisibleHint, shouldShowRequestPermissionRationale, startActivity, startActivity, startActivityForResult, startActivityForResult, startIntentSenderForResult, toString, unregisterForContextMenu
public void setAdapter(ObjectAdapter adapter)
public ObjectAdapter getAdapter()
public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener)
public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener)
public BaseOnItemViewClickedListener getOnItemViewClickedListener()
public void onCreate(Bundle savedInstanceState)
Fragment
Fragment.onAttach(Activity)
and before
Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle)
, but is not called if the fragment
instance is retained across Activity re-creation (see Fragment.setRetainInstance(boolean)
).
Note that this can be called while the fragment's activity is
still in the process of being created. As such, you can not rely
on things like the activity's content view hierarchy being initialized
at this point. If you want to do work once the activity itself is
created, see Fragment.onActivityCreated(Bundle)
.
If your app's targetSdkVersion
is Build.VERSION_CODES.M
or lower, child fragments being restored from the savedInstanceState are restored after
onCreate
returns. When targeting Build.VERSION_CODES.N
or
above and running on an N or newer platform version
they are restored by Fragment.onCreate
.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
Fragment
Fragment.onCreate(Bundle)
and Fragment.onActivityCreated(Bundle)
.
If you return a View from here, you will later be called in
Fragment.onDestroyView()
when the view is being released.
onCreateView
in class Fragment
inflater
- The LayoutInflater object that can be used to inflate
any views in the fragment,container
- If non-null, this is the parent view that the fragment's
UI should be attached to. The fragment should not add the view itself,
but this can be used to generate the LayoutParams of the view.savedInstanceState
- If non-null, this fragment is being re-constructed
from a previous saved state as given here.@Deprecated protected View inflateTitle(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
onInflateTitleView(LayoutInflater,ViewGroup,Bundle)
instead.public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
BrandedFragment
BrandedFragment.installTitleView(LayoutInflater, ViewGroup, Bundle)
to inflate
title view. Default implementation uses layout file lb_browse_title.
Subclass may override and use its own layout, the layout must have a descendant with id
browse_title_group that implements TitleViewAdapter.Provider
. Subclass may return
null if no title is needed.onInflateTitleView
in class BrandedFragment
inflater
- The LayoutInflater object that can be used to inflate
any views in the fragment,parent
- Parent of title view.savedInstanceState
- If non-null, this fragment is being re-constructed
from a previous saved state as given here.TitleViewAdapter.Provider
, or null for no title view.protected void setupPresenter(Presenter rowPresenter)
setAdapter(ObjectAdapter)
. Note
that setup should only change the Presenter behavior that is meaningful in DetailsFragment. For
example how a row is aligned in details Fragment. The default implementation invokes
setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter)
protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter)
FullWidthDetailsOverviewRowPresenter
. The default implementation
adds two alignment positions(ItemAlignmentFacet
) for ViewHolder of
FullWidthDetailsOverviewRowPresenter to align in fragment.public RowsFragment getRowsFragment()
public void setSelectedPosition(int position)
public void setSelectedPosition(int position, boolean smooth)
protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int adapterPosition, int selectedPosition, int selectedSubPosition)
onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter,
FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int)
if presenter is
instance of FullWidthDetailsOverviewRowPresenter
.presenter
- The presenter used to create row ViewHolder.viewHolder
- The visible (attached) row ViewHolder, note that it may or may not
be selected.adapterPosition
- The adapter position of viewHolder inside adapter.selectedPosition
- The adapter position of currently selected row.selectedSubPosition
- The sub position within currently selected row. This is used
When a row has multiple alignment positions.protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter, FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition, int selectedPosition, int selectedSubPosition)
FullWidthDetailsOverviewRowPresenter.STATE_HALF
,
FullWidthDetailsOverviewRowPresenter.STATE_FULL
and
FullWidthDetailsOverviewRowPresenter.STATE_SMALL
.presenter
- The presenter used to create row ViewHolder.viewHolder
- The visible (attached) row ViewHolder, note that it may or may not
be selected.adapterPosition
- The adapter position of viewHolder inside adapter.selectedPosition
- The adapter position of currently selected row.selectedSubPosition
- The sub position within currently selected row. This is used
When a row has multiple alignment positions.public void onStart()
Fragment
Activity.onStart
of the containing
Activity's lifecycle.onStart
in class BrandedFragment
protected Object createEntranceTransition()
protected void runEntranceTransition(Object entranceTransition)
protected void onEntranceTransitionEnd()
protected void onEntranceTransitionPrepare()
protected void onEntranceTransitionStart()
public void onViewCreated(View view, Bundle savedInstanceState)
Fragment
Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle)
has returned, but before any saved state has been restored in to the view.
This gives subclasses a chance to initialize themselves once
they know their view hierarchy has been completely created. The fragment's
view hierarchy is not however attached to its parent at this point.onViewCreated
in class BrandedFragment
view
- The View returned by Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle)
.savedInstanceState
- If non-null, this fragment is being re-constructed
from a previous saved state as given here.public void prepareEntranceTransition()
Entrance transition is the standard slide-in transition that shows rows of data in browse screen and details screen.
The method is ignored before LOLLIPOP (API21).
This method must be called in or
before onCreate(). Typically entrance transition should be enabled when savedInstance is
null so that fragment restored from instanceState does not run an extra entrance transition.
When the entrance transition is enabled, the fragment will make headers and content
hidden initially.
When data of rows are ready, app must call startEntranceTransition()
to kick off
the transition, otherwise the rows will be invisible forever.
It is similar to android:windowsEnterTransition and can be considered a late-executed android:windowsEnterTransition controlled by app. There are two reasons that app needs it:
Transition object is returned by createEntranceTransition(). Typically the app does not need override the default transition that browse and details provides.
public void startEntranceTransition()
If startEntranceTransition() is called before onViewCreated(), it will be pending and executed when view is created.
public final ProgressBarManager getProgressBarManager()
ProgressBarManager
.