Поведение метода Leanback BrowseFragment isShowingHeader()

Я работаю над созданием приложения для телевидения.

Моя проблема заключается в том, что когда я нажимаю правую кнопку на пульте телевизора и перехожу от фрагмента заголовка к первому элементу адаптера GridFragment (VerticalGridSupportFragment), функция isShowingHeaders() из библиотеки Leanback возвращает значение true.

Даже если мой HeaderFragment был скрыт или не виден в то время.

Но если я перехожу от фрагмента заголовка к RowSupportFragment, поведение первого элемента соответствует ожидаемому, т. е. метод isShowingHeaders() возвращает false.

Пожалуйста, найдите код ниже

public class PageAndListRowFragment extends BrowseSupportFragment {
private static final long HEADER_ID_1 = 1;
private static final String HEADER_NAME_1 = "Page Fragment";
private static final long HEADER_ID_2 = 2;
private static final String HEADER_NAME_2 = "Rows Fragment";
private static final long HEADER_ID_3 = 3;
private BackgroundManager mBackgroundManager;
private ArrayObjectAdapter mRowsAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setupUi();
    loadData();
    mBackgroundManager = BackgroundManager.getInstance(getActivity());
    mBackgroundManager.attach(getActivity().getWindow());
    getMainFragmentRegistry().registerFragment(PageRow.class,
            new PageRowFragmentFactory(mBackgroundManager));
}
 private void setupUi() {
    setHeadersState(HEADERS_ENABLED);
    setHeadersTransitionOnBackEnabled(true);
 setBrandColor(getResources().getColor(R.color.fastlane_background));
    setTitle("Title goes here");
    setOnSearchClickedListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

    prepareEntranceTransition();
}

private void loadData() {
    mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
    setAdapter(mRowsAdapter);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            createRows();
            startEntranceTransition();
        }
    }, 2000);
}


@Override
public boolean isInHeadersTransition() {
    boolean header_shown1=super.isInHeadersTransition();
    Log.e("header_shown1",header_shown1+"val12");
    isShowingHeaders();
    return header_shown1;
}




@Override
public boolean isShowingHeaders() {

    boolean header_shown=super.isShowingHeaders();
    Log.e("header_shown",header_shown+"val12");


    return header_shown;
}

private void createRows() {
    HeaderItem headerItem1 = new HeaderItem(HEADER_ID_1, HEADER_NAME_1);
    PageRow pageRow1 = new PageRow(headerItem1);
    mRowsAdapter.add(pageRow1);

    HeaderItem headerItem2 = new HeaderItem(HEADER_ID_2, HEADER_NAME_2);
    PageRow pageRow2 = new PageRow(headerItem2);
    mRowsAdapter.add(pageRow2);


}

private static class PageRowFragmentFactory extends BrowseSupportFragment.FragmentFactory {
    private final BackgroundManager mBackgroundManager;

    PageRowFragmentFactory(BackgroundManager backgroundManager) {
        this.mBackgroundManager = backgroundManager;
    }

    @Override
    public Fragment createFragment(Object rowObj) {
        Row row = (Row)rowObj;
        mBackgroundManager.setDrawable(null);
        if (row.getHeaderItem().getId() == HEADER_ID_1) {
            return new SampleFragmentA();
        } else if (row.getHeaderItem().getId() == HEADER_ID_2) {
            return new SampleFragmentB();
        }

        throw new IllegalArgumentException(String.format("Invalid row %s", rowObj));
    }
}

public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragmentA> {

    public PageFragmentAdapterImpl(SampleFragmentA fragment) {
        super(fragment);
    }
}

/**
 * Simple page fragment implementation.
 */
public static class SampleFragmentA extends VericalGridSupportFragment {
    private static final int COLUMNS = 4;
    private final int ZOOM_FACTOR = FocusHighlight.ZOOM_FACTOR_SMALL;
    private ArrayObjectAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupAdapter();
        loadData();
        getMainFragmentAdapter().getFragmentHost().notifyDataReady(getMainFragmentAdapter());
    }


    private void setupAdapter() {
        VerticalGridPresenter presenter = new VerticalGridPresenter(ZOOM_FACTOR);
        presenter.setNumberOfColumns(COLUMNS);
        setGridPresenter(presenter);

        CardPresenterSelector cardPresenter = new CardPresenterSelector(getActivity());
        mAdapter = new ArrayObjectAdapter(cardPresenter);
        setAdapter(mAdapter);

        setOnItemViewClickedListener(new OnItemViewClickedListener() {
            @Override
            public void onItemClicked(
                    Presenter.ViewHolder itemViewHolder,
                    Object item,
                    RowPresenter.ViewHolder rowViewHolder,
                    Row row) {
                Card card = (Card)item;

            }
        });
    }

    private void loadData() {
        String json = Utils.inputStreamToString(getResources().openRawResource(
                R.raw.grid_example));
        CardRow cardRow = new Gson().fromJson(json, CardRow.class);
        mAdapter.addAll(0, cardRow.getCards());
    }
}

/**
 * Page fragment embeds a rows fragment.
 */
public static class SampleFragmentB extends RowsSupportFragment {
    private final ArrayObjectAdapter mRowsAdapter;

    public SampleFragmentB() {
        mRowsAdapter = new ArrayObjectAdapter(new ShadowRowPresenterSelector());

        setAdapter(mRowsAdapter);
        setOnItemViewClickedListener(new OnItemViewClickedListener() {
            @Override
            public void onItemClicked(
                    Presenter.ViewHolder itemViewHolder,
                    Object item,
                    RowPresenter.ViewHolder rowViewHolder,
                    Row row) {
                                }
        });
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        createRows();
        getMainFragmentAdapter().getFragmentHost().notifyDataReady(getMainFragmentAdapter());
    }

    private void createRows() {
            String json = Utils.inputStreamToString(getResources().openRawResource(
                    R.raw.page_row_example));
            CardRow[] rows = new Gson().fromJson(json, CardRow[].class);
            for (CardRow row : rows) {
                if (row.getType() == CardRow.TYPE_DEFAULT) {
                    mRowsAdapter.add(createCardRow(row));
                }
            }
    }

    private Row createCardRow(CardRow cardRow) {
        PresenterSelector presenterSelector = new CardPresenterSelector(getActivity());
        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
        for (Card card : cardRow.getCards()) {
            adapter.add(card);
        }

        HeaderItem headerItem = new HeaderItem(cardRow.getTitle());
        return new CardListRow(headerItem, adapter, cardRow);
    }} }

person Chinnu    schedule 10.12.2018    source источник


Ответы (1)


Вот что указано на справочной странице:

HeadersFragment может быть настроен на отображение или скрытие по умолчанию или может быть полностью отключен. Подробнее см. setHeadersState(int).

Дополнительную информацию см. на справочной странице.

Вы можете проверить ссылку исходный код BrowseFragment, чтобы понять его поведение. Пожалуйста, посмотрите реализацию метода onCreateView.

person burakk    schedule 10.12.2018
comment
Я не пытаюсь установитьHeaderState(). Я хочу проверить isHeaderShowing() для каждого HeadersTransition в BrowseSupportFragment Пожалуйста, найдите код, который я использую public boolean isInHeadersTransition() { boolean header_show=super.isInHeadersTransition(); показывает заголовки(); вернуть header_show; } public boolean isShowingHeaders() { boolean header_shown=super.isShowingHeaders(); вернуть header_show; } - person Chinnu; 11.12.2018
comment
Пожалуйста, опубликуйте полный и правильно отформатированный код. - person burakk; 11.12.2018