我的应用程序使用了developer.google.com中定义的滑动导航标签,我使用的是FragmentPagerAdapter。
在尝试确保我的应用程序可访问时,我遇到了以下问题:
启动应用程序时,将调用第一个片段的onCreateView(...),然后调用第二个和第三个片段的onCreateView(...)。 因此,第三个标签的标题在应用程序启动时具有焦点,即使第一个标签当前对用户可见并且应该读出它的标题,也会将其读出。
在浏览标签时,标签标题会被正确读出,具体取决于用户当前可以看到的标签。
有没有办法解决这个问题,以便在启动时,第一个标题标题具有焦点并被读出。
P.S。我尝试通过从第一个片段的setUserVisibleHint(...)方法发送一个辅助功能事件来解决这个问题,但这不起作用,至少在Android 4.4上。 我发送的辅助功能事件是调用第一个片段的textview的sendAccessibilityEvent函数之一。 再次,澄清一下,问题不在于可访问性事件,这在应用程序运行时正常工作,我在选项卡之间滑动。问题是,在启动时,app焦点不在当前显示的片段上,而是在最后调用onCreateView()的片段上。
答案 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开发者网站。