我试图在我的Android应用程序中更改选项菜单的背景颜色.我正在使用ActionBarSherlock库.我试过这段代码来改变选项菜单的背景颜色
但我最终得到一个例外"java.lang.illegalstateexception:已经在此layoutinflater上设置了一个工厂"
LayoutInflater.setFactory();
我不知道这段代码有什么问题.任何人都可以帮我解决这个问题吗?
android background-color options-menu android-optionsmenu oncreateoptionsmenu
我有一个有几个片段的应用程序.
只有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().这会导致一些碎片移动到后面的堆栈.
我正在尝试将自定义布局显示为选项菜单中的项目.这就是我到目前为止所做的
<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)
我哪里错了?
我有这个导航抽屉,工作得非常好.重构我的代码我删除了所有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
在为ICS开发应用程序时 - 操作栏看起来会有所不同,具体取决于设备上是否存在物理menubutton.
例如,如果没有,则在操作栏中显示虚拟按钮.
是否可以通过在模拟器中以某种方式禁用它来模拟没有menubutton的设备?
我需要能够在android上更改选项菜单(按下菜单按钮时显示的菜单),以便在一个案例中(例如按下按钮时),它将使用特定的菜单资源(XML文件)如菜单中的/ res/menu/...),在另一种情况下,使用不同的XML文件.
到目前为止,我只看到了没有xml的例子(这里和这里的例子),并且它们工作正常,但我希望能够在某些情况下更改整个菜单.我试图修改我发现的解决方案,但我的试验都没有奏效.
如果可能的话,我宁愿重新创建菜单,只要它需要使用与当前菜单资源不同的菜单资源进行更新.
请帮我.
xml resources android dynamically-generated android-optionsmenu
我的应用程序使用旧式选项菜单.目前我们的目标是API 9.在Galaxy S4上,我注意到以下行为:
此时,点击选项菜单中的任何元素(包括"更多")选项似乎没有任何效果. 然而,该系统实际上是缓存这些水龙头.如果用户点击菜单五次(没有可见效果),则点击后退按钮隐藏菜单,然后点击菜单按钮再次显示菜单,所有缓存的点击立即进行.每次用户点击该菜单项时,都会调用onOptionsMenuItemSelected()一次.
这只发生在S4(可能还有其他三星设备)上.值得注意的是,我没有看到使用Galaxy Nexus运行股票4.2.2的这种行为.
这是三星Android自定义的错误,还是我在我的应用程序中做错了什么,股票Android代码更宽容?
android android-menu galaxy android-optionsmenu samsung-mobile
我无法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
我真的很难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) 出于某种原因, myonCreateOptionsMenu和onPrepareOptionsMenu运行两次(在两种方法开始时使用日志输入进行检查)。这发生在我拥有的多个片段中,包括一些非常基本的片段(只是膨胀菜单,没有别的)。
这是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 的哪一部分可能会引起这个问题?
我发现我打电话.invalidateOptionsMenu()的getItemCount()的方法Adapter。我认为这会调用onPrepareOptionsMenu(),但阅读文档,它似乎调用onCreateOptionsMenu(). 我可能得到onCreate..()和onPrepare..()逆转这里,要去检查出来了。
我刚刚意识到我的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)