标签: android-optionsmenu

java.lang.illegalstateexception:已经在此layoutinflater上设置了一个工厂

我试图在我的Android应用程序中更改选项菜单的背景颜色.我正在使用ActionBarSherlock库.我试过这段代码来改变选项菜单的背景颜色

/sf/answers/593275021/

但我最终得到一个例外"java.lang.illegalstateexception:已经在此layoutinflater上设置了一个工厂"

LayoutInflater.setFactory();

我不知道这段代码有什么问题.任何人都可以帮我解决这个问题吗?

android background-color options-menu android-optionsmenu oncreateoptionsmenu

9
推荐指数
3
解决办法
7461
查看次数

隐藏PreferenceFragment上的选项菜单

我有一个有几个片段的应用程序.

只有A片段有一个选项菜单.可以从片段B(其扩展了listfragment)启动片段.

所以B片段没有选项菜单,如果我从中选择一个项目,片段A将通过选项菜单启动,如果返回,片段B仍然没有选项菜单.

问题是,如果我从导航抽屉中选择"设置"菜单(扩展了首选项碎片),而当前窗口是片段A,则会显示设置片段,其中包含片段A中的选项菜单.但是,如果我在导航抽屉中选择"设置"菜单,而我当前窗口片段B,C,D(没有选项菜单)一切正常.

片段A:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    inflater.inflate(R.menu.menu_station, menu);
}
Run Code Online (Sandbox Code Playgroud)

设置片段:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);

    sharedPreferenceSettings = new SharedPreferenceSettings(getActivity());

    addPreferencesFromResource(R.xml.settings);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_settings, container, false);
}
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

编辑:

经过几个小时的调试,我找到了解决方案 问题是片段事务的fragmentManager不同.对于设置片段,我使用了getSupportFragmentManager(),对于其他人 - fragmentManager().这会导致一些碎片移动到后面的堆栈.

android android-fragments android-optionsmenu

9
推荐指数
1
解决办法
1003
查看次数

Android actionLayout未显示工具栏

我正在尝试将自定义布局显示为选项菜单中的项目.这就是我到目前为止所做的

<item
    android:id="@+id/action_profile"
    android:orderInCategory="100"
    android:title="Profile"
    android:actionLayout="@layout/layout_menu_profile"
    app:showAsAction="never" />
Run Code Online (Sandbox Code Playgroud)

我试过了

    app:actionLayout="@layout/layout_menu_profile"
Run Code Online (Sandbox Code Playgroud)

以及每 SO链接,但它仍然只显示标题-简介

我通过Android Studio 1.5使用Blank Activity创建了新项目.minSDK = 15,targetSDK = 23

以下是空白活动中的代码.

@Override
 public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_home, menu);

    MenuItem item = menu.findItem(R.id.action_profile);


    return true;
}
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

android menu android-optionsmenu android-toolbar

9
推荐指数
2
解决办法
2863
查看次数

单击工具栏上的汉堡图标不会打开导航抽屉

我有这个导航抽屉,工作得非常好.重构我的代码我删除了所有onOptionsItemSelecteds活动,并使所有活动都继承自扩展AppComplatActivity实现所有必要方法的基本活动.在点击汉堡图标后,即使我有syncstate()和所有东西,它也不再起作用.

任何线索为什么这不起作用?

其中一项活动:

public class MainActivity extends BaseActivity implements SearchFilterFragment.OnFragmentInteractionListener {

NavigationView navigationView;
DrawerLayout drawerLayout;

private Tracker mTracker;

@Override
protected void onResume() {
    super.onResume();
    drawerLayout.openDrawer(GravityCompat.START);
}

@Override
protected void onPostResume() {
    super.onPostResume();
    mTracker.setScreenName("MainActivity" + "-----");
    mTracker.send(new HitBuilders.ScreenViewBuilder().build());
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerLayout.openDrawer(GravityCompat.START);
    navigationView = (NavigationView) findViewById(R.id.navigation_view_primary);
    navigationView.setNavigationItemSelectedListener(new NavigationDrawerListener(this));
    setupToolbar();
    Haftdong application = (Haftdong) getApplication();
    mTracker = application.getDefaultTracker();
}

private void …
Run Code Online (Sandbox Code Playgroud)

android android-optionsmenu navigation-drawer hamburger-menu

9
推荐指数
1
解决办法
4500
查看次数

在android模拟器中禁用menubutton

在为ICS开发应用程序时 - 操作栏看起来会有所不同,具体取决于设备上是否存在物理menubutton.

例如,如果没有,则在操作栏中显示虚拟按钮.

是否可以通过在模拟器中以某种方式禁用它来模拟没有menubutton的设备?

android android-optionsmenu android-actionbar

8
推荐指数
3
解决办法
4209
查看次数

android - 动态更改选项菜单,但是通过XML扩展

我需要能够在android上更改选项菜单(按下菜单按钮时显示的菜单),以便在一个案例中(例如按下按钮时),它将使用特定的菜单资源(XML文件)如菜单中的/ res/menu/...),在另一种情况下,使用不同的XML文件.

到目前为止,我只看到了没有xml的例子(这里这里的例子),并且它们工作正常,但我希望能够在某些情况下更改整个菜单.我试图修改我发现的解决方案,但我的试验都没有奏效.

如果可能的话,我宁愿重新创建菜单,只要它需要使用与当前菜单资源不同的菜单资源进行更新.

请帮我.

xml resources android dynamically-generated android-optionsmenu

8
推荐指数
1
解决办法
1万
查看次数

选项菜单锁定了galaxy s4

我的应用程序使用旧式选项菜单.目前我们的目标是API 9.在Galaxy S4上,我注意到以下行为:

  1. 用户点击菜单按钮.菜单按预期显示.
  2. 用户点击"更多"以访问溢出部分.溢出部分按预期显示.
  3. 用户点击后退按钮返回原始选项菜单.原始菜单按预期显示.

此时,点击选项菜单中的任何元素(包括"更多")选项似乎没有任何效果. 然而,该系统实际上是缓存这些水龙头.如果用户点击菜单五次(没有可见效果),则点击后退按钮隐藏菜单,然后点击菜单按钮再次显示菜单,所有缓存的点击立即进行.每次用户点击该菜单项时,都会调用onOptionsMenuItemSelected()一次.

这只发生在S4(可能还有其他三星设备)上.值得注意的是,我没有看到使用Galaxy Nexus运行股票4.2.2的这种行为.

这是三星Android自定义的错误,还是我在我的应用程序中做错了什么,股票Android代码更宽容?

android android-menu galaxy android-optionsmenu samsung-mobile

8
推荐指数
1
解决办法
1126
查看次数

不调用onPrepareOptionsMenu

我无法onPrepareOptionsMenu()正常工作.无论我尝试什么,我都无法得到它.

我的应用程序的体系结构如下:我的主Activity包含一个包含ViewPager的Fragment,而ViewPager又有四个子Fragment实例.目前,我(已成功)填充Activity with中的初始选项菜单onCreateOptionsMenu(),但我希望添加一些与每个活动子Fragment相对应的额外选项.

在我的孩子片段中,我已经确定setHasOptionsMenu(true)正在调用它onCreate()并且getSherlockActivity().supportInvalidateOptionsMenu()被调用onActivityCreated().在主Activity中,onCreateOptionsMenu()在实例化子Fragment之后调用一次,无论它们是否包含supportInvalidateOptionsMenu().随后在寻呼机中的片段被替换时再次调用它.

我已经尝试将onPrepareOptionsMenu()代码向上移动到父片段和主要活动 - 无济于事,这表明问题与我使用嵌套片段无关.我也尝试将onCreateOptionsMenu()方法从主Activity移动到两个片段,在那里它不被调用.

如果有人知道这里发生了什么,我会非常感激,因为我已经被困在这两天了.

更新 - 我已经确切地解决了现在的问题,只是我仍然不确定如何解决它.我正在测试4.2,它似乎在Activity 中onCreateOptionsMenu()被调用onResume()- 如在JB 4.2上的onResume之后调用的onCreateOptionsMenu中所示.我认为这意味着片段无法调用,onPrepareOptionsMenu()因为菜单在实例化后才会存在.那么我该如何解决这个问题呢?

android android-optionsmenu android-viewpager actionbarsherlock

7
推荐指数
1
解决办法
2585
查看次数

如何在SherlockFragment中实现onCreateOptionsMenu方法?

我真的很难onCreateOptionsMenu在我的Sherlock片段中设置方法,因为我通常不会那么多地使用Sherlock片段.有人能说出我要导入的内容以及实现的工作原理吗?

我有一些代码:

public class MyFragment extends SherlockFragment {

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


    View rootView = inflater.inflate(R.layout.custom_list, container, false);

    // SOME CODE ...

    return rootView;
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
   // ???
}

}
Run Code Online (Sandbox Code Playgroud)

android android-optionsmenu actionbarsherlock

7
推荐指数
1
解决办法
1万
查看次数

为什么 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
查看次数