美文网首页
Android TV Leanback (七)(详情视图)

Android TV Leanback (七)(详情视图)

作者: fengfancky | 来源:发表于2017-11-28 11:22 被阅读955次

    创建一个详情presenter

    Leanback library提供了视频浏览框架,你可以使用presenter控制数据在屏幕上的显示,包括视频详情。这个框架为止提供了AbstractDetailsDescriptionPresenter,你需要实现onBindDescription(),将数据与视图绑定。如下:

    public class DetailsDescriptionPresenterextends AbstractDetailsDescriptionPresenter {
        @Override
        protected void onBindDescription(ViewHolder viewHolder, Object itemData) {
            MyMediaItemDetails details = (MyMediaItemDetails) itemData;
    
            // itemData包含视频的详细信息
            //需要显示视频的详细信息
            // viewHolder.getTitle().setText(details.getShortTitle());
    
            // 使用静态数据测试:
            viewHolder.getTitle().setText(itemData.toString());
            viewHolder.getSubtitle().setText("2014   Drama   TV-14");
            viewHolder.getBody().setText("Lorem ipsum dolor sit amet, consectetur "
                + "adipisicing elit, sed do eiusmod tempor incididunt ut labore "
                + " et dolore magna aliqua. Ut enim ad minim veniam, quis "
                + "nostrud exercitation ullamco laboris nisi ut aliquip ex ea "
                + "commodo consequat.");
        }
    }
    

    继承DetailsFragment

    使用DetailsFragment来显示视频的详细信息,它提供额外的内容,比如:预览图片,关于视频的操作项(购买、播放、关注等)。您还可以提供额外的内容,如相关视频或演员的列表。如下:

    public class MediaItemDetailsFragment extends DetailsFragment {
    
        private static final String TAG = "MediaItemDetailsFragment";
        private ArrayObjectAdapter mRowsAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            Log.i(TAG, "onCreate");
            super.onCreate(savedInstanceState);
            buildDetails();
        }
    
        private void buildDetails() {
            ClassPresenterSelector selector = new ClassPresenterSelector();
        
            // 将视频详细信息的presenter附加到rowPresenter上
            FullWidthDetailsOverviewRowPresenter rowPresenter =
                new FullWidthDetailsOverviewRowPresenter(
                    new DetailsDescriptionPresenter());
    
            selector.addClassPresenter(DetailsOverviewRow.class, rowPresenter);
            selector.addClassPresenter(ListRow.class,
                    new ListRowPresenter());
            mRowsAdapter = new ArrayObjectAdapter(selector);
    
            Resources res = getActivity().getResources();
            DetailsOverviewRow detailsOverview = new DetailsOverviewRow(
                    "Media Item Details");
       
            // 给详情视图添加图片和操作
            detailsOverview.setImageDrawable(res.getDrawable(R.drawable.jelly_beans));
            detailsOverview.addAction(new Action(1, "Buy $9.99"));
            detailsOverview.addAction(new Action(2, "Rent $2.99"));
            mRowsAdapter.add(detailsOverview);
    
       
            // 添加相关项
            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(
                new StringPresenter());
            listRowAdapter.add("Media Item 1");
            listRowAdapter.add("Media Item 2");
            listRowAdapter.add("Media Item 3");
            HeaderItem header = new HeaderItem(0, "Related Items", null);
            mRowsAdapter.add(new ListRow(header, listRowAdapter));
            setAdapter(mRowsAdapter);
        }
    }
    

    创建详情Activity

    创建一个activity包含DetailsFragment来显示详情。

    创建布局:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:name="com.example.android.mediabrowser.MediaItemDetailsFragment"
        android:id="@+id/details_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    创建Activity:

    public class DetailsActivity extends Activity{
    
         @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.details);
        }
    }
    

    注册:

    <application>
      ...
      <activity android:name=".DetailsActivity"
        android:exported="true"
        android:theme="@style/Theme.Leanback"/>
    </application>
    

    定义一个Listener监听每项的点击

    public class BrowseMediaActivity extends Activity {
        ...
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...
    
            // create the media item rows
            buildRowsAdapter();
    
            // add a listener for selected items
            mBrowseFragment.OnItemViewClickedListener(
                new OnItemViewClickedListener() {
                    @Override
                    public void onItemClicked(Object item, Row row) {
                        System.out.println("Media Item clicked: " + item.toString());
                        Intent intent = new Intent(BrowseMediaActivity.this,
                            DetailsActivity.class);
                        // pass the item information
                        intent.getExtras().putLong("id", item.getId());
                        startActivity(intent);
                    }
                });
        }
    }

    相关文章

      网友评论

          本文标题:Android TV Leanback (七)(详情视图)

          本文链接:https://www.haomeiwen.com/subject/oybncxtx.html