如何获取 selected/focused 项或其在 Android 的 VerticalGridFragment class 中的索引?

How to get selected/focused item or it's index in VerticalGridFragment class of Android?

我需要获取 VerticalGridFragment 的 selected/focused 项索引。我在文档https://developer.android.com/reference/android/support/v17/leanback/app/VerticalGridFragment.html中找到了设置选中项的方法, 即 setSelectedPosition(int position) 设置所选项目的位置。

但是我在文档中找不到任何提供所选项目或其索引的方法。

有人可以帮我找到解决方法来获取 VerticalGridFragment 的选定项目吗?

无法获取对焦位置,但可以获取对焦对象。在方法 setAdapter(mAdapter); 下面你可以写:

setOnItemViewSelectedListener(new OnItemViewSelectedListener() {
        @Override
        public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
            Object object = (Object) item;
            //can write somethings here
        }
    });

您获得了所选项目的位置。

private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
        @Override
        public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) {
            int position=  mAdapter.indexOf(item);

        }
}

您可以使用 Leanback 中的 OnItemViewSelectedListener 界面在行或项目被选中时接收通知。

看到当前选择的概念不同于焦点。可以在没有焦点的情况下选择行或项目。例如,当行 header 视图获得焦点时,相应的行视图将被选中。

mRowsAdapter 是您的 ArrayObjectAdapter,需要很少的转换来获取当前行索引和当前项目索引。

因此,首先您获得行适配器,然后通过将您的行适配器转换为 ArrayObjectAdapter,您获得了在这些行中保存项目的适配器(仅是行适配器)。

       OnItemViewSelectedListener { itemViewHolder, item, rowViewHolder, row ->

            val indexOfRow = mRowsAdapter.indexOf(row)
            val indexOfItem = ((row as ListRow).adapter as ArrayObjectAdapter).indexOf(item)
            Toast.makeText(context, "$indexOfItem-$indexOfRow", Toast.LENGTH_SHORT).show()

            }
        }