Доступность Android, фокус на заголовке 3-й вкладки при использовании фрагментов, вместо этого фокус должен быть на заголовке текущей вкладки?

В моем приложении используются вкладки со свайпом, определенные на developer.google.com, где Я использую FragmentPagerAdapter.

Пытаясь убедиться, что мое приложение доступно, я столкнулся со следующей проблемой:

Когда приложение запускается, вызывается onCreateView(...) 1-го фрагмента, а затем 2-го и 3-го фрагментов. Как следствие этого, заголовок третьей вкладки имеет фокус при запуске приложения и считывается, даже если первая вкладка в настоящее время видна пользователю, и ее заголовок должен быть прочитан.

При пролистывании вкладок заголовки вкладок считываются правильно, в зависимости от того, какая вкладка в данный момент видна пользователю.

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

P.S. Я попытался исправить это, отправив событие доступности из метода setUserVisibleHint(...) первого фрагмента, но это не работает, по крайней мере, на Android 4.4. Событие доступности, которое я отправляю, является вызовом одной из функций sendAccessibilityEvent текстового представления 1-го фрагмента. Опять же, чтобы уточнить, проблема не в событии доступности, оно отлично работает, пока приложение работает, и я пролистываю вкладки. Проблема в том, что при запуске фокус приложения находится не на отображаемом в данный момент фрагменте, а на фрагменте, чей метод onCreateView() был вызван последним.


person Dustfinger    schedule 15.09.2014    source источник
comment
Как вы теперь отправляете свои события доступности? Можете ли вы предоставить код?   -  person Ayzen    schedule 15.09.2014
comment
вы нашли решение этой проблемы?   -  person sowmia    schedule 12.11.2014


Ответы (1)


Сделайте это в своем методе getItem mainactivity.. что-то вроде этого..

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a Fragment 

        if (position == 0) {
            return //Fragment 1;
        }
        if (position == 1) {
            return //Fragment 2;
        }

        if (position == 2) {
            return //Fragment 3;
        }
        return null;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

Вы должны реализовать что-то подобное выше в следующей части вашего кода.

public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
    public DemoCollectionPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new DemoObjectFragment();
        Bundle args = new Bundle();
        // Our object is just an integer :-P
        args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 100;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "OBJECT " + (position + 1);
    }
}

приведенный выше код взят с сайта разработчика Google, о котором вы упомянули.

person Kushal Sharma    schedule 15.09.2014
comment
Я должен был уточнить, что я действительно реализовал FragmentPagerAdapter, а не FragmentStatePagerAdapter. Спасибо за ответ в любом случае. - person Dustfinger; 15.09.2014
comment
При создании нового проекта в Eclipse вы можете автоматически генерировать код для представления с вкладками. В разделе «Создать активность» выберите «Активность с вкладками», а в следующем диалоговом окне выберите желаемый стиль навигации. Вы можете создать свое приложение поверх него. idk, если вы можете или нет .. я новичок, и мне нужно несколько очков, я думаю ..) Спасибо: D - person Kushal Sharma; 15.09.2014