标签: android-optionsmenu

为什么 onCreateOptionsMenu 运行多次?

出于某种原因, myonCreateOptionsMenuonPrepareOptionsMenu运行两次(在两种方法开始时使用日志输入进行检查)。这发生在我拥有的多个片段中,包括一些非常基本的片段(只是膨胀菜单,没有别的)。

这是onCreateOptionsMenu有此问题的s之一:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.actionbuttons_add_removeall, menu);
    optionsMenu = menu;
}
Run Code Online (Sandbox Code Playgroud)

什么会导致这些方法被多次调用(主要是两次)?


更新

我发现这是由RecyclerView我正在使用的(以某种方式)引起的。有这个问题的所有视图都使用 RV,我之前提到的视图没有这个问题,确实没有。有了这些新信息,RV 的哪一部分可能会引起这个问题?

更新2

我发现我打电话.invalidateOptionsMenu()getItemCount()的方法Adapter。我认为这会调用onPrepareOptionsMenu(),但阅读文档,它似乎调用onCreateOptionsMenu(). 我可能得到onCreate..()onPrepare..()逆转这里,要去检查出来了。

更新3

我刚刚意识到我的RecyclerViewAdapter,getItemCount()方法中的选项菜单无效,该方法显然在首次创建片段时运行。

@Override
public int getItemCount() {
    int tableSize = getTableSizeMethod();

    if (tableSize < 1) {
        if (!AppManagerFragment.hideDeleteAllButton) {
            AppManagerFragment.hideDeleteAllButton = true;
            ((Activity) context).invalidateOptionsMenu();
            return 0;
        } …
Run Code Online (Sandbox Code Playgroud)

java android android-optionsmenu oncreateoptionsmenu

7
推荐指数
2
解决办法
3635
查看次数

重新使用选项菜单代码

有没有方便的方法在多个活动中显示相同的选项菜单选项?

示例:在我的应用程序中,我以三种方式之一显示电视指南.

  1. 七天指南(带有7个标签的TabActivity)
  2. 所有频道'现在显示'(ListActivity)
  3. 今天所有节目都以开始时间显示(活动 - 可以轻松更改为ListActivity)

对于选项菜单TabActivity,代码非常简单......

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    menu.clear();
    inflater.inflate(R.menu.gv_options_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.view:
        ...
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

...但此刻我似乎需要将其复制/粘贴到我不喜欢的其他两个活动中.如果我更改选项菜单代码,我还需要为其他两个菜单代码执行此操作.

我能想到的唯一选择是我有一个'helper'类(POJO)我可以添加一个方法并传入context以允许使用该getMenuInflator()方法和另一个方法我可以将结果传递item.getItemId()给使用switch的进程-案件.

使用相同的"选项"菜单进行多个活动的常规方法是什么?

android android-optionsmenu

6
推荐指数
2
解决办法
3795
查看次数

Android选项菜单项中没有显示图标

我创建了一个带有我自己制作的图标的选项菜单(24px x 24px),但它没有显示.

我的xml中的代码(位于res /菜单中)如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_insert"
    android:icon="@drawable/menu_add"
    android:title="@string/menu_insert" />
</menu> 
Run Code Online (Sandbox Code Playgroud)

菜单在我的Activity.java文件中创建,如文档中所述:

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater mi = getMenuInflater();
    mi.inflate(R.menu.list_menu, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)

PS项目的标题一直位于左侧,我似乎无法找到文档中的任何位置如何居中(显然是android:重力不在那里完成)

谢谢

icons android android-optionsmenu

6
推荐指数
1
解决办法
6229
查看次数

在dispatchCreateOptionsMenu期间旋转时出现NullPointerException,堆栈跟踪不包括我的应用程序中的任何函数

我有一个应用程序,它使用ICS中操作栏上的选项卡,其中每个选项卡中都有一个片段.在某些情况下,在我按下操作栏上选项菜单上的按钮后,然后旋转设备,我得到一个NullPointerException.我可以使用相同的步骤可靠地重现它,但在某些情况下(如果我不按动作栏上的任何按钮)不会产生异常.该异常似乎没有引用我的代码中的任何行,并且在方向更改后重新创建活动期间发生.

这是例外:

09-18 20:56:22.357: E/AndroidRuntime(689): FATAL EXCEPTION: main
09-18 20:56:22.357: E/AndroidRuntime(689): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andavapps.flightbot/com.andavapps.flightbot.FlightBotActivity}: java.lang.NullPointerException
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3351)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.app.ActivityThread.access$700(ActivityThread.java:123)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.os.Looper.loop(Looper.java:137)
09-18 20:56:22.357: E/AndroidRuntime(689):     at android.app.ActivityThread.main(ActivityThread.java:4424)
09-18 20:56:22.357: E/AndroidRuntime(689):     at java.lang.reflect.Method.invokeNative(Native Method)
09-18 20:56:22.357: E/AndroidRuntime(689):     at java.lang.reflect.Method.invoke(Method.java:511)
09-18 20:56:22.357: E/AndroidRuntime(689):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-18 20:56:22.357: E/AndroidRuntime(689):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-18 …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception android-optionsmenu android-actionbar android-tabs

6
推荐指数
1
解决办法
2521
查看次数

在onCreate android之前调用onCreateOptionsMenu

我是android的初学者,我正在开发小型Android应用程序.在我的应用程序中,我正在使用Sherlock库.我的应用程序包含一个主要活动和两个片段.在我的列表片段结构看起来像

public class MyCards extends SherlockListFragment
        {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside fragment on create");

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on activity created");
    }

    private void displayCards(int type) {

        Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside display cards");

    }

    @Override
    public void onResume() {
        super.onResume();

    }

    @Override
    public void onPause() {
        super.onPause();

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.mycards, container, …
Run Code Online (Sandbox Code Playgroud)

android android-optionsmenu actionbarsherlock android-listfragment

6
推荐指数
2
解决办法
6655
查看次数

Android Lollipop设备上没有显示菜单软键[Nexus 9和nexus 5]

我似乎无法找到Menu softkey我的Nexus 9和nexus 5 [Android版Lollipop].我开发的所有应用程序option menu都没有显示menu softkey.所以我无法访问它option menu.

我的一些应用程序也Actionbar/Toolbar因为他们的设计要求而不使用,因此我正在寻找一种无需添加的解决方案Actionbar/Toolbar.

所以我想知道,有没有办法展示Menu softKey in Android Lollipop

更新:

在此输入图像描述 这是我在Nexus 9上找到的示例应用程序.您可以看到它具有action overflow button遗留应用程序.谁能告诉我这是怎么做到的?

android android-optionsmenu nexus-5 android-5.0-lollipop

6
推荐指数
1
解决办法
5574
查看次数

如何更改主题"Theme.AppCompat.Light.NoActionBar"的选项菜单点颜色

要更改默认选项菜单图标颜色(3垂直dote),我尝试添加

<item name="android:textColorSecondary">@color/white</item>
Run Code Online (Sandbox Code Playgroud)

但它没有任何改变.我认为它不起作用因为我的AppTheme父是Theme.AppCompat.Light.NoActionBar.所以有人可以帮我这个吗?

android android-optionsmenu

6
推荐指数
2
解决办法
9595
查看次数

防止选项菜单在 OptionItemSelected 上关闭

我有一个选项菜单,里面有一堆复选框。我想打开或关闭其中的一堆,但每次我只检查一个时菜单都会自动关闭。我可以防止菜单在选择某个项目后关闭吗?我还想控制关闭何时发生以及何时被阻止。

Activity.cs(不包括与选项菜单无关的所有内容)

public class Activity: ReactiveActivity<ViewModel>, IAppCompatCallback
{

    public override bool OnCreateOptionsMenu(IMenu menu)
    {
        var inflater = MenuInflater;
        inflater.Inflate(Resource.Menu.actions, menu);
        return true;
    }

    public override bool OnOptionsItemSelected(IMenuItem item)
    {
        if(item.ItemId == Resource.Id.action_settings) {
           StartActivity(typeof(SettingsActivity));
        }
        else {
           //Code changing the view based on selections
        }
        return base.OnOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

动作.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:title="Choose options...">
  <menu>
    <group android:checkableBehavior="all">
      <item android:id="@+id/checkOption1"
            android:title="Option 1" 
            android:checked="true" />
      <item android:id="@+id/checkOption2"
            android:title="Option 2"
            android:checked="true" />
      <item android:id="@+id/checkOption3"
            android:title="Option 3"
            android:checked="true" /> …
Run Code Online (Sandbox Code Playgroud)

android xamarin.android android-optionsmenu

6
推荐指数
1
解决办法
2478
查看次数

使用自定义操作栏/工具栏视图创建选项菜单

我已经为我的操作栏实现了自定义视图.除此之外,我还需要一个OptionMenu. 有没有办法仍然使用默认的OptionMenu?我不想自己设计整个菜单及其功能.

顺便说一句,我的活动扩展了android.support.v7.app.AppCompatActivity


用于为我的操作栏实现自定义视图的代码

custom_action_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/custom_B"
        android:layout_width="60dp"
        android:layout_height="30dp" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

我把它包含在我的主XML中:

<include
layout="@layout/custom_action_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

对于OptionsMenu,我放了一些从未打印过的日志

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    Log.i(Constants.APP_NAME, "hello1");
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Log.i(Constants.APP_NAME, "hello2");
}
Run Code Online (Sandbox Code Playgroud)

android android-optionsmenu android-actionbar android-toolbar

5
推荐指数
1
解决办法
4061
查看次数

展开的搜索视图折叠后,其他选项菜单项不显示

I have a simple activity with options menu setup with the code shown below. The problem i'm experiencing is that after expanding and collapsing the searchview, menu items with app:showAsAction="ifRoom" do not appear, even though there is room on the toolbar. Menu items with app:showAsAction="never" on the other hand do appear.

menu_simple_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search_white_24dp"
        android:title="@string/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always|collapseActionView" />
    <item
        android:id="@+id/action_filter"
        android:icon="@drawable/ic_filter_list_white_24dp"
        android:title="@string/action_filter"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_sort"
        android:icon="@drawable/ic_sort_white_24dp"
        android:title="@string/action_sort"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_print_all"
        android:icon="@drawable/ic_print_white_24dp" …
Run Code Online (Sandbox Code Playgroud)

android android-optionsmenu searchview

5
推荐指数
1
解决办法
417
查看次数