Поведение метода Leanback BrowseFragment isShowingHeader () - PullRequest
0 голосов
/ 10 декабря 2018

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

Моя проблема заключается в том, что когда я нажимаю правую кнопку с пульта дистанционного управления телевизором и перемещаюсь от фрагмента заголовка к 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);
    }} }

1 Ответ

0 голосов
/ 10 декабря 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...