Повторное использование AndroidTV RowsFragment вне BrowseFragment

Я пытаюсь повторно использовать RowsFragment, предоставленный AndroidTV Leanback, за пределами BrowseFragment, чтобы иметь аналогичный внешний вид взаимодействия строк в другом макете, но я получаю ошибки XML-инфляции, которые я не смог отладить и решать.

Сама реализация аналогична тому, что реализовано здесь: https://medium.com/building-for-android-tv , но в блоге он заменяет разные фрагменты одного типа внутри BrowseFragment. Есть ли что-то принципиально неправильное в моем подходе? Если да, то почему? Я читал исходники Leanback и не смог найти ничего, что я мог бы понять (хотя это большая библиотека), которое бы связывало фрагменты в такой степени.

Воспроизведение соответствующего кода:
https://gist.github.com/orbitbot/c9070ed00961c3abe4ca

02-26 12:12:26.950    4465-4527/com.my.client E/AndroidRuntime﹕ FATAL EXCEPTION: main
      Process: com.my.client, PID: 4465
      android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>
              at android.view.LayoutInflater.createView(LayoutInflater.java:620)
              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:462)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
              at android.support.v17.leanback.widget.RowContainerView.<init>(RowContainerView.java:48)
              at android.support.v17.leanback.widget.RowContainerView.<init>(RowContainerView.java:37)
              at android.support.v17.leanback.widget.RowPresenter.onCreateViewHolder(RowPresenter.java:169)
              at android.support.v17.leanback.widget.ItemBridgeAdapter.onCreateViewHolder(ItemBridgeAdapter.java:247)
              at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121)
              at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431)
              at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
              at android.support.v17.leanback.widget.GridLayoutManager.getViewForPosition(GridLayoutManager.java:573)
              at android.support.v17.leanback.widget.GridLayoutManager$2.createItem(GridLayoutManager.java:1057)
              at android.support.v17.leanback.widget.StaggeredGrid.appendItemToRow(StaggeredGrid.java:242)
              at android.support.v17.leanback.widget.StaggeredGridDefault.appendItems(StaggeredGridDefault.java:49)
              at android.support.v17.leanback.widget.GridLayoutManager.appendOneVisibleItem(GridLayoutManager.java:1263)
              at android.support.v17.leanback.widget.GridLayoutManager.appendVisibleItems(GridLayoutManager.java:1273)
              at android.support.v17.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:1554)
              at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
              at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.support.v17.leanback.widget.ScaleFrameLayout.onLayout(ScaleFrameLayout.java:135)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
              at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
              at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
              at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
              at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
              at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
              at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
              at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
              at android.view.View.layout(View.java:14817)
              at android.view.ViewGroup.layout(ViewGroup.java:4631)
              at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1989)
              at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1746)
              at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
              at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5672)
              at android.view.Choreographer$CallbackRecord.run(Choreographer.java:772

person orbitbot    schedule 26.02.2015    source источник
comment
Я автор этой серии статей. Мне не совсем понятно, чего вы пытаетесь достичь и чем это отличается от того, что я сделал с пользовательской реализацией BrowseFragment.   -  person Sebastiano    schedule 26.02.2015
comment
Хорошо понял. Это выглядит правильно на первый взгляд. Я собираюсь попробовать и посмотреть, смогу ли я понять, что происходит.   -  person Sebastiano    schedule 26.02.2015
comment
Круто, спасибо за старание! Позже я собираюсь добавить в макет больше фрагментов, поэтому RowsFragment будет только его частью (примерно нижней половиной).   -  person orbitbot    schedule 26.02.2015


Ответы (1)


Убедитесь, что ваша ChangePicActivity имеет правильную тему в AndroidManifest.xml.

Добавьте android:theme="@style/Theme.Leanback" в соответствующий тег Activity. Как это

 <activity
        android:name=".ChangePicActivity"
        android:theme="@style/Theme.Leanback"
 >
[...]
person pelotasplus    schedule 22.06.2015
comment
Спасибо за чаевые! Очевидно, когда вы это понимаете, но мы возимся с темами для каждого действия из-за устаревших причин. - person orbitbot; 01.07.2015