[英]ActionBar menu items not visible on some Android 4.1.2 devices
两个月前,我发布了一个Android应用v14,名为MinSDKVersion,而v19为TargetSDKVersion。 一切正常,除了一些用户报告ActionBar菜单项有问题:
它们显示在第一个应用程序启动时,但是在首次从选项卡切换时消失。
应用程序的MainActivity扩展了FragmentActivity
并使用ActionBar选项卡在3个不同的页面(片段)之间切换:
public class MainActivity extends FragmentActivity {
protected void onCreate(Bundle savedInstanceState) {
...
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
viewPager = (ViewPager)findViewById(R.id.pager);
viewPager.setAdapter(sectionsPagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
getActionBar().setSelectedNavigationItem(position);
}
});
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(Tab tab, android.app.FragmentTransaction arg1) {
viewPager.setCurrentItem(tab.getPosition());
}
public void onTabReselected(Tab arg0, android.app.FragmentTransaction arg1) { }
public void onTabUnselected(Tab arg0, android.app.FragmentTransaction arg1) { }
};
actionBar.addTab(actionBar.newTab()
.setText(R.string.LOC_Common_Overview)
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText(R.string.LOC_Contacts)
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText(R.string.LOC_Messages)
.setTabListener(tabListener));
...
}
}
菜单文件的示例:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/contacts_action_add"
android:icon="@drawable/image__white__plus"
android:showAsAction="always"
android:title="@string/LOC_Create">
<menu>
<item
android:id="@+id/contacts_action_add_entry"
android:icon="@drawable/image__white__person"
android:showAsAction="always"
android:title="@string/LOC_Contact"/>
<item
android:id="@+id/contacts_action_add_group"
android:icon="@drawable/image__white__persons"
android:showAsAction="always"
android:title="@string/LOC_Group"/>
</menu>
</item>
</menu>
还有片段的示例:
public class ContactsFragment extends Fragment {
public ContactsFragment() {
super();
setHasOptionsMenu(true);
}
...
private Menu optionsMenu;
private MenuItem addEntryMenuItem;
private MenuItem addGroupMenuItem;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Log.d("ContactsFragment: onCreateOptionsMenu");
inflater.inflate(R.menu.menu_main__contacts, menu);
optionsMenu = menu;
if (optionsMenu != null) {
Log.d("ContactsFragment: onCreateOptionsMenu - optionsMenu != null");
addEntryMenuItem= optionsMenu.findItem(R.id.contacts_action_add_entry);
addGroupMenuItem= optionsMenu.findItem(R.id.contacts_action_add_group);
}
}
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("ContactsFragment: onOptionsItemSelected");
if (item == addEntryMenuItem) {
...
return true;
} else if (item == addGroupMenuItem) {
...
return true;
}
return false;
}
}
我发现有几个条目涉及ActionBar项的问题,但它们均引用4.0之前的基本SDK较低的应用程序。 看来从硬件菜单按钮ActionBar菜单转换应用程序时出现问题。 由于我的应用程序仅支持SDK 14+,因此这并不是我的解决方案。
用户日志显示,已调用片段的onCreateOptionsMenu
方法,并且菜单已正确膨胀。 那么为什么菜单项显示不正确?
相同的代码对所有设备上的浪费绝无任何问题,只有很少的用户受到影响。 据我所知,他们都使用Android 4.1.2。 除此之外,我在设备等方面看不到任何相似之处。
知道如何解决这个问题吗?
PS:是否使用android:showAsAction =“ always”``不会影响菜单项。
好像您错过了片段的onCreate()中的setHasOptionsMenu调用
请参阅本指南
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.