Android辅助功能,在使用片段时关注第3个标题标题,焦点应该是当前标签标题而不是?

时间:2014-09-15 16:38:45

标签: android android-fragments tabs accessibility fragmentpageradapter

我的应用程序使用了developer.google.com中定义的滑动导航标签,我使用的是FragmentPagerAdapter。

在尝试确保我的应用程序可访问时,我遇到了以下问题:

启动应用程序时,将调用第一个片段的onCreateView(...),然后调用第二个和第三个片段的onCreateView(...)。 因此,第三个标签的标题在应用程序启动时具有焦点,即使第一个标签当前对用户可见并且应该读出它的标题,也会将其读出。

在浏览标签时,标签标题会被正确读出,具体取决于用户当前可以看到的标签。

有没有办法解决这个问题,以便在启动时,第一个标题标题具有焦点并被读出。

P.S。我尝试通过从第一个片段的setUserVisibleHint(...)方法发送一个辅助功能事件来解决这个问题,但这不起作用,至少在Android 4.4上。 我发送的辅助功能事件是调用第一个片段的textview的sendAccessibilityEvent函数之一。 再次,澄清一下,问题不在于可访问性事件,这在应用程序运行时正常工作,我在选项卡之间滑动。问题是,在启动时,app焦点不在当前显示的片段上,而是在最后调用onCreateView()的片段上。

1 个答案:

答案 0 :(得分:0)

在你的mainactivity getItem方法中这样做......就像这样..

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开发者网站。