我正在使用android电视的默认项目。下面是在MyBrowseFragment中创建卡的代码:

private void loadRows() {
    List<Movie> list = MovieList.setupMovies();
    ListRowPresenter mListRowPresenter = new ListRowPresenter();
    mRowsAdapter = new ArrayObjectAdapter(mListRowPresenter);

    mListRowPresenter.setRowViewSelected(/*HOW TO GET VIEWHOLDER HERE?*/, false);

    CardPresenter cardPresenter = new CardPresenter();

    int i;
    for (i = 0; i < NUM_ROWS; i++) {
        if (i != 0) {
            Collections.shuffle(list);
        }
        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(cardPresenter);
        for (int j = 0; j < NUM_COLS; j++) {
            listRowAdapter.add(list.get(j % 5));
        }
        HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i]);
        mRowsAdapter.add(new ListRow(header, listRowAdapter));
    }

    setAdapter(mRowsAdapter);
}

我这样做是因为我不想让第一行卡被选中时,我启动应用程序。只有在用户按下DPAD上的向下按钮后才能选择它。如果我不能这样做,我应该怎么做才能被提及的行为?

最佳答案

通过子类化listrowpresenter并重写setRowViewSelected

@Override
protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) {
    super.initializeRowViewHolder(holder);

    setRowViewSelected(holder, false);
}

但我不认为您可以使用这种方法取消选中initializeRowViewHolder(RowPresenter.ViewHolder holder)中的所有项。
尝试在加载数据后设置BrowseFragment,而不是在ItemViewSelectedListener中设置,以便在首次启动时取消选择所有项。
默认情况下,行的左上角项始终被选中,并且在初始启动时不能拥有所有未选中项的可能原因:
初始启动调用的onActivityCreated方法(line 1372-1382
    @Override
    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
            RowPresenter.ViewHolder rowViewHolder, Row row) {
        int position = mMainFragmentRowsAdapter.getSelectedPosition(); //<--
        if (DEBUG) Log.v(TAG, "row selected position " + position);
        onRowSelected(position);
        if (mExternalOnItemViewSelectedListener != null) {  //<--
            mExternalOnItemViewSelectedListener.onItemSelected(itemViewHolder, item,
                    rowViewHolder, row);
        }
    }

其中BrowseFragment始终返回0
line 483-485
    public int getSelectedPosition() {
        return 0;
    }

它还调用onItemSelected,其中mMainFragmentRowsAdapter.getSelectedPosition()是您在应用程序的getSelectedPosition()中设置的itemViewSelectedListener。
因此,在初始启动时,第0行中的第0个项目将被选为默认的选定项目,但如果延迟设置mExternalOnItemViewSelectedListener.onItemSelected,则此调用将不会第一次到达您的项目选定侦听器。

07-26 02:15