如何在Android的VerticalGridFragment类中获取所选/重点项目或它的索引?

时间:2017-06-23 08:09:14

标签: android android-fragments leanback

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

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

有人可以帮我找一个工作来获取VerticalGridFragment的选定项目吗?

3 个答案:

答案 0 :(得分:2)

您将获得所选项目位置。

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);

        }
}

答案 1 :(得分:2)

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

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

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()

            }
        }

答案 2 :(得分:0)

您无法获得聚焦位置,但您可以获得聚焦对象。在下面的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
        }
    });