Android TV 后退
Posted
技术标签:
【中文标题】Android TV 后退【英文标题】:Android TV Leanback 【发布时间】: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_
android:layout_
android:background="@color/photo_label_box">
<fragment
android:id="@+id/detail_layout"
android:layout_
android:name="com.DetailsActivityGame$Detalfragment"
android:layout_></fragment>
<fragment
android:id="@+id/row_layout"
android:layout_
android:layout_below="@+id/detail_layout"
android:name="com.DetailsActivityGame$SampleFragmentC"
android:layout_></fragment>
</RelativeLayout>
谢谢
【问题讨论】:
【参考方案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_
android:layout_
android:background="@color/leader_background">
<RelativeLayout
android:layout_
android:layout_
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_
android:layout_
/>
</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。以上是关于Android TV 后退的主要内容,如果未能解决你的问题,请参考以下文章
Android TV 应用无法安装在 Android TV 设备上