【问题标题】:Android TV LeanbackAndroid TV 后退
【发布时间】:2019-04-06 13:48:17
【问题描述】:

我是 Android TV 开发的新手。我不知道要使用哪种类型的片段。我想要两个实现类似于上面屏幕截图的布局作为 jiocinema。不知何故,我在活动布局中使用两个 xml 片段实现了它。第二个片段在点击 API 后加载屏幕截图,因此它会在一段时间后加载。从上面的屏幕截图中可以看出,我希望将布局分为两部分。顶部是详细信息和一些按钮,底部是该电影的屏幕截图列表。

在我的情况下,问题是,底部列表部分将重点放在加载此特定屏幕上,然后按下向上按钮或任何按钮,它永远不会失去焦点,也永远不会进入顶部。 注意:下面的片段是异步加载的,因为它会点击一个用于截图 url 的 api

可能是我没有为这个特定的布局使用适当的片段。有人可以指出我的代码或帮助我决定使用什么来进行这种布局。可以实现,但导航是主要的。

代码

活动布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/photo_label_box">
    <fragment
        android:id="@+id/detail_layout"
        android:layout_width="match_parent"
        android:name="com.DetailsActivityGame$Detalfragment"
        android:layout_height="200dp"></fragment>
    <fragment
        android:id="@+id/row_layout"
        android:layout_width="match_parent"
        android:layout_below="@+id/detail_layout"
        android:name="com.DetailsActivityGame$SampleFragmentC"
        android:layout_height="wrap_content"></fragment>
</RelativeLayout>

谢谢

【问题讨论】:

    标签: android android-fragments android-tv leanback


    【解决方案1】:

    尝试使用 V4 Support Fragment 中的 RowSupportFragment 以获得所需的输出。

    将布局分为按钮、描述和下方滚动布局两部分布局(由RowSupportFragment表示)

    //------------------------detail_layout

    <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/leader_background">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/main_layout"
      //your own layout design for buttons and description
    </RelativeLayout>
    <fragment
        android:name="FragmentScreenshots"
        android:id="@+id/screenshot_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
        </LinearLayout>
    

    //----------------Detailfragment--------------------

    public static class Detailfragment extends Fragment {
        public  Detailfragment(){ }
    
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            final View view = inflater.inflate(R.layout.detail_layout, container, false);
            //————————your own implementation—————————————————————————
            return view;
         }
         public static class FragmentScreenshots extends RowsSupportFragment {
             private ArrayObjectAdapter mRowsAdapter = null;
              public FragmentScreenshots() {
                mRowsAdapter = new ArrayObjectAdapter(new ShadowRowPresenterSelector());
                setAdapter(mRowsAdapter);
               }
    
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
              //———————Provide data accordinally———————————
                 List<ScreenshotItem> list;
    
                 // Add a Related items row
                ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(
                        new ScreenshotCardPresenter(getActivity()));
                for (ScreenshotItem s:list)
                {
                    listRowAdapter.add(s);
                }
                HeaderItem header = new HeaderItem("Screenshots");
                mRowsAdapter.add(new ListRow(header, listRowAdapter));
                setAdapter(mRowsAdapter);
    
                setOnItemViewClickedListener(new OnItemViewClickedListener() {
                    @Override
                    public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
                        if (item instanceof ScreenshotItem) {
                                                      }
                        else{
                                                    }
                    }
                });
    
                setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
                    @Override
                    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
    
                    }
                });
            }
    
            @Override
            public void setExpand(boolean expand) {
                super.setExpand(true);
            }
    
            @Override
            public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {
                super.setOnItemViewClickedListener(listener);
            }
    
            @Override
            public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {
                super.setOnItemViewSelectedListener(listener);
            }
        }}
    

    【讨论】:

      【解决方案2】:

      您必须使用BrowseFragment 来达到您的目的。它由 RowsFragment 和 HeadersFragment 组成。

      BrowseFragment 将其 ObjectAdapter 的元素呈现为垂直列表中的一组行。此适配器中的元素必须是 Row 的子类。

      This tutorial 可以帮助您入门。

      【讨论】:

      • 感谢您的回答。但我不需要左抽屉……我还能用吗?我没有因为抽屉而尝试过
      • 为此,您已经在浏览片段中进行了自定义。
      • 我不同意。如果您不需要左侧抽屉(这是 BrowseFragment 的主要用途/组件之一),只需使用 RowsFragment。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 2016-07-26
      • 2017-06-04
      • 1970-01-01
      • 2020-10-13
      相关资源
      最近更新 更多