Сосредоточьтесь на первом элементе списка и прокрутите список

Я разрабатываю приложение для Android TV и показываю элементы в списке. Когда я прокручиваю фокус списка, перемещаясь от текущего элемента к следующему, я хочу, чтобы постоянно фокусировался на первом элементе и прокручивал весь список с той же позиции выбранного элемента. Мол, эта реализация Hotstar. В настоящее время я использую Android ListRow со следующим кодом.

AssetCardPresenter assetCardPresenter = new AssetCardPresenter(getActivity());
            MdsCompletedRecordingAdapter cardRowAdapter = new MdsCompletedRecordingAdapter(getActivity(), assetCardPresenter, 10);
            Map<String, MdsCompletedRecord> completedRecordingMap = getMdsCompletedRecordingProgramsMap(completedRecordedProgramList);
            HeaderItem headerItem = new HeaderItem(SCHEDULED_PROGRAM_HEADER_ID, COMPLETED_HEADER_NAME);
            ArrayList<MdsCompletedRecord> arrayList = new ArrayList<>(completedRecordingMap.values());
            Collections.reverse(arrayList);
            cardRowAdapter.addAllItems(arrayList);
            ListRow row = new ListRow(headerItem, cardRowAdapter);
            mRowAdapter.add(row);

2 ответа

Вы можете легко сделать это, используя HorizontalGridView из Leanback и установив эти параметры, чтобы заставить фокус в левой части экрана.

    windowAlignment = BaseGridView.WINDOW_ALIGN_BOTH_EDGE
    windowAlignmentOffset = 0f
    windowAlignmentOffsetPercent = 0f
    itemAlignmentOffsetPercent = 0f

В Presenter вашей строки вы можете получить ссылку на HorizontalGridView строки, а затем использовать setWindowAlignmentOffsetPercent:

      @Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
    
    horizontalGridView = (HorizontalGridView) parent.findViewById(R.id.row_content);
    int offset = 10;
    horizontalGridView.setWindowAlignmentOffsetPercent(offset);
    

    MyImageCardView cardView = new MyImageCardView(mContext);

    return new ViewHolder(cardView);
}
Другие вопросы по тегам