And*_*oid 6 android android-actionbar
我正面临一个关于标签滑动的问题.我的项目是基于Android 3.2构建的.我正在使用支持库4.0(android-support-v4.jar)实现选项卡滑动.所有实现的工作正常,但是当我将我的应用程序部署到ICS设备时,然后在纵向模式下,我在操作栏中获取一个微调器以供选项卡选择.在纵向模式下,尽管内容正在变化,但在完成滑动时选项卡选择不会更改,并且在横向模式下一切正常.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayHomeAsUpEnabled(true);
// Set up the ViewPager with the sections adapter.
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
Run Code Online (Sandbox Code Playgroud)
我已经尝试actionBar.setSelectedNavigationItem(position);在这一行上设置断点,甚至在纵向模式下它被调用但是选择没有改变.
任何人都可以帮忙吗?
编辑: 发现了类似的问题,但没有看到它是如何解决的,以及如何将其集成到我的代码中.
Muk*_*ani 16
问题: 由于实际状态不足,平台使用折叠导航(即Spinner).系统会自动确定横向的NAVIGATION_MODE_TABS和纵向的NAVIGATION_MODE_LIST,将方向从横向更改为纵向更新UI但由于某种原因不会将导航模式属性更新为NAVIGATION_MODE_LIST,因此不会调用mActionView.setDropdownSelectedPosition(位置).请参阅以下ActionBarImpl代码:setSelectedNavigationItem
Run Code Online (Sandbox Code Playgroud)public void setSelectedNavigationItem(int position) { switch (mActionView.getNavigationMode()) { case NAVIGATION_MODE_TABS: selectTab(mTabs.get(position)); break; case NAVIGATION_MODE_LIST: mActionView.setDropdownSelectedPosition(position); break; default: throw new IllegalStateException( "setSelectedNavigationIndex not valid for current navigation mode"); } }
变通方法解决方案: 通过反射,我们可以获取制表符微调器对象并调用setSelection方法.
private Spinner getTabSpinner()
{
try
{
int id = getResources().getIdentifier("action_bar", "id", "android");
View actionBarView = findViewById(id);
Class<?> actionBarViewClass = actionBarView.getClass();
Field mTabScrollViewField = actionBarViewClass.getDeclaredField("mTabScrollView");
mTabScrollViewField.setAccessible(true);
Object mTabScrollView = mTabScrollViewField.get(actionBarView);
if (mTabScrollView == null) {
return null;
}
Field mTabSpinnerField = mTabScrollView.getClass().getDeclaredField("mTabSpinner");
mTabSpinnerField.setAccessible(true);
Object mTabSpinner = mTabSpinnerField.get(mTabScrollView);
if (mTabSpinner != null)
{
return (Spinner)mTabSpinner;
}
}
catch (Exception e) {
return null;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
然后在onPageSelected事件中调用上面的方法.
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
Spinner spinner = getTabSpinner();
if (spinner != null) {
spinner.setSelection(position);
}
}
Run Code Online (Sandbox Code Playgroud)
推荐这篇文章https://gist.github.com/2657485
| 归档时间: |
|
| 查看次数: |
6113 次 |
| 最近记录: |