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
相关产品推荐
相关产品推荐

