我设法将一个Switch放在操作栏中(如在Wi-Fi设置中).
我将以下mainmenu.xml文件放在/ menu文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/item1"
android:titleCondensed="Service"
android:title="Service"
android:actionViewClass="android.widget.Switch"
android:showAsAction="always|withText">
</item>
Run Code Online (Sandbox Code Playgroud)
之后我覆盖了onCreateOptionsMenu()活动中的方法,如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
// Get widget's instance
swtService = (Switch)menu.findItem(R.id.item1).getActionView();
swtService.setOnCheckedChangeListener(this);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法理解何时调用此方法.这是问题所在:它似乎onCreateOptionsMenu甚至没有被调用过onResume(),所以NullPointerException抛出了:
@Override
public void onResume()
{
super.onResume();
// Synchronize the switch with service's status
swtService.setChecked(ServiceHelper.isServiceStarted(this, MySystemService.class.getName()));
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?还有另一种方法将View放在操作栏中吗?
编辑
我的目标API是17,我不关心较低的API.:)
这是应用程序的一个镜头,显示了生命周期方法:

谢谢
android switch-statement android-actionbar oncreateoptionsmenu
我有简单的应用程序.
这是MyActivity.java
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么onCreateOptionsMenu在手机上调用方法而不是在平板电脑上调用?
由于我是 Android 编程新手,我遇到了另一个我不明白的小事情。为什么下面的 onCreateOptionsMenu 方法返回super.onCreateOptionsMenu 而不是仅仅调用 super.onCreateOptionsMenu (就像在 onCreate 方法中完成的那样)?
(这是来自Android 教程。)
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
(我在 StackOverflow 上没有发现重复的问题。我可能问了一个愚蠢的问题,或者我只是不擅长搜索。)
我创建了一个搜索界面,但我似乎无法给连接SearchView在ActionBar我搜索的配置文件.当我尝试在我的onCreateOptionsMenu方法中检索它时SearchManager.getSearchableInfo(getComponentName()返回null.有人可以帮我解决这个问题吗?
Settings.onCreateOptionsMenu(菜单)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main, menu);
SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView();
SearchableInfo info = sm.getSearchableInfo(getComponentName()); //This variable is returned as null
sv.setSearchableInfo(info);
sv.setIconifiedByDefault(false);
sv.setSubmitButtonEnabled(true);
return true;
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中的设置活动
<activity
android:name=".Settings"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中的可搜索活动
<activity
android:name=".ImageSearch"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我 …
我是安卓新手。我知道这个问题以前曾被问过,但我仍然很困惑。当我的 onCreateOptionMenu() 和 onOptionItemSelected() 返回它们时,此方法会做什么
任何人都可以帮助我我会产生什么效果
1)如果我返回 true
2)如果我返回 false
3)当我返回 super.onCreateOptionMenu() 和 super.onOptionItemSelected 时会发生什么
谁能用一个很好的例子向我解释一下这一点。我还是很困惑。
Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
Log.i("frag", "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
final View view = inflater.inflate(R.layout.fragment_initiate_chat, container, false);
bindViews(view);
setUpClickListener();
setUpCategories(view);
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//menu.clear();
inflater.inflate(R.menu.menu_inititate_chat, menu);
Log.i("frag", "onCreateOptionsMenu");
//super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i("frag", "onOptionsItemSelected");
final int itemId = item.getItemId();
switch (itemId) {
case R.id.send:
sendIssue();
break;
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
我无法为我的片段设置菜单。我使用了 setHasOptionsMenu(true); 但它仍然没有任何区别。
我的片段 …
android 上的操作栏(工具栏)有 3 个选项菜单。它的工作正常。但问题是当我卸载并重新安装菜单项的重复项时。标题也保持不变,没有改变。有时,如果我们关闭应用程序并重新启动它的工作正常。我完全困惑和震惊。
这是代码 MainActivity (OnCreateOptionsMenu):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.clear();
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = null;
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
}
MenuItem item = menu.findItem(R.id.action_wishlist);
wishlistCount = (RelativeLayout) MenuItemCompat.getActionView(item);
wishlistCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
setWishlistCount();
MenuItem cartitem = menu.findItem(R.id.action_cart);
cartCount = (RelativeLayout) MenuItemCompat.getActionView(cartitem);
cartCount.setOnClickListener(new View.OnClickListener() …Run Code Online (Sandbox Code Playgroud) android options-menu android-optionsmenu oncreateoptionsmenu
在我的应用程序中执行某些操作时,我正在更改特定菜单项的可绘制对象。
除了我尝试在 Activity 的 onCreate 方法中执行此操作时,一切都正常。
我正在使用以下方法:
menu.findItem(R.id.favorite).setIcon(R.drawable.ic_action_icons8_star_filled_100);
Run Code Online (Sandbox Code Playgroud)
在 onClick 事件中,它可以完美运行。
但是当我在 onCreate 中使用相同的方法时,它给了我以下错误:
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference
Run Code Online (Sandbox Code Playgroud)
这是我用来膨胀的代码 menu
private Menu menu;
--------------------
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.image_details, menu);
this.menu = menu;
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢。
android nullpointerexception android-optionsmenu oncreateoptionsmenu
在投票结束或标记为重复之前PS看到问题.已经采取了所有可能的方法来隐藏菜单项但似乎没有工作.
我的options_menu.xml如下
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:title="@string/search_title"
android:icon="@drawable/ic_action_search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
<item
android:id="@+id/menu_share"
android:icon="@android:drawable/ic_menu_share"
android:showAsAction="always"
android:title="Share"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
我在ParentFragment上显示此菜单,我在其中隐藏menu_share使用此代码
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.options_menu, menu);
menu.findItem(R.id.menu_share).setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)
这会Share成功隐藏选项.现在这个片段打开了一个新片段,即一个儿童片段.
在这个子片段中,我想隐藏该Search项目并仅显示该Share选项.但是使用相同的代码在这里没有用.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.options_menu, menu);
menu.findItem(R.id.menu_search).setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过getActivity().invalidateOptionsMenu();但没有效果,Actionbar总是显示两个菜单项.请帮我弄清楚导致这种情况的原因.
错误日志
E/AndroidRuntime? FATAL EXCEPTION: main
Process: info.androidhive.slidingmenu, PID: 27321
java.lang.NullPointerException
at info.androidhive.slidingmenu.HomeFragment.onPrepareOptionsMenu(HomeFragment.java:476)
at android.app.Fragment.performPrepareOptionsMenu(Fragment.java:1794)
at android.app.FragmentManagerImpl.dispatchPrepareOptionsMenu(FragmentManager.java:1964)
at android.app.Activity.onPreparePanel(Activity.java:2665)
at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:540)
at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:881) …Run Code Online (Sandbox Code Playgroud) android menuitem android-fragments android-actionbar oncreateoptionsmenu
我将我的课程从 Activity 更改为 AppCompatActivity。
并item.getActionView() 改为 MenuItemCompat.getActionView(item)
现在我在下面的代码中得到NPE。
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.messages, menu);
MenuItem item = menu.findItem(R.id.menuTxtSize);
Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
int index = sp.getInt(getString(R.string.pr_text_size),
Integer.parseInt(getString(R.string.pr_default_text_size)));
spinner.setSelection(index);
E/ACRA: ACRA caught a NullPointerException for com.alex.documentation java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setSelection(int)' on a null object reference at com.alex.message.activities.MessagesActivity
Run Code Online (Sandbox Code Playgroud)
如何修复错误?
android nullpointerexception android-support-library oncreateoptionsmenu
android ×10
android-menu ×1
java ×1
menuitem ×1
options-menu ×1
return ×1
searchable ×1
searchview ×1
super ×1