繁体   English   中英

在某些Android 4.1.2设备上看不到ActionBar菜单项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM