You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android TV中BrowseSupportFragment的getSelectedPosition返回异常问题

Android TV BrowseSupportFragment选中位置返回值异常问题解决

我在Android TV应用里使用带Header的BrowseSupportFragment,每个Header对应一行内容。遇到如下问题:向下滚动选中每行第一个Item,或是选中Header列表里的Header时,getSelectedPosition()始终返回0;但选中行内第二个Item时,该方法能返回正确的行索引。

相关代码如下:

@Override
public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object
        item, RowPresenter.ViewHolder rowViewHolder, Row row) {

    int pos = getSelectedPosition();//滚动切换Header时返回0
}

解决方法

放弃使用getSelectedPosition(),改用rowViewHolder.getRowPosition()获取当前选中行的索引,这个方法能准确返回Header或对应行的位置,不受行内选中Item的位置影响。

修改后的代码:

@Override
public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object
        item, RowPresenter.ViewHolder rowViewHolder, Row row) {

    int pos = rowViewHolder.getRowPosition();//可返回正确的行索引
}

问题原因

getSelectedPosition()的逻辑是针对可见行的相对位置,而非整个列表的绝对行索引。当选中Header或行首Item时,控件内部的可见行锚点逻辑会导致它返回0;而rowViewHolder.getRowPosition()直接绑定当前行在Adapter中的绝对位置,因此能得到正确结果。

内容的提问来源于stack exchange,提问作者Malo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:01:10