标签: oncreateoptionsmenu

在ActionBar中获取Switch实例

我设法将一个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

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

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

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

为什么Android onCreateOptionsMenu方法返回super.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 上没有发现重复的问题。我可能问了一个愚蠢的问题,或者我只是不擅长搜索。)

java android return super oncreateoptionsmenu

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

可搜索的配置为SearchView返回Null

我创建了一个搜索界面,但我似乎无法给连接SearchViewActionBar我搜索的配置文件.当我尝试在我的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)

我 …

android searchable searchview oncreateoptionsmenu

4
推荐指数
1
解决办法
1961
查看次数

这个方法做什么 super.onCreateOptionMenu() 和 super.onOptionsItemSelected(item)

我是安卓新手。我知道这个问题以前曾被问过,但我仍然很困惑。当我的 onCreateOptionMenu() 和 onOptionItemSelected() 返回它们时,此方法会做什么

任何人都可以帮助我我会产生什么效果

1)如果我返回 true

2)如果我返回 false

3)当我返回 super.onCreateOptionMenu() 和 super.onOptionItemSelected 时会发生什么

谁能用一个很好的例子向我解释一下这一点。我还是很困惑。

android oncreateoptionsmenu

2
推荐指数
1
解决办法
3722
查看次数

无法为片段设置菜单

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 android-menu android-fragments oncreateoptionsmenu

2
推荐指数
1
解决办法
1245
查看次数

操作栏上的 Android 选项菜单显示重复的图标

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

1
推荐指数
2
解决办法
2334
查看次数

选项菜单在运行时为空

在我的应用程序中执行某些操作时,我正在更改特定菜单项的可绘制对象。

除了我尝试在 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

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

Android:无法在Child Fragment的ActionBar中隐藏菜单项

在投票结束或标记为重复之前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

0
推荐指数
1
解决办法
1128
查看次数

将 Activity 更改为 AppCompatActivity 时出现 NullPointerException

我将我的课程从 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

-1
推荐指数
1
解决办法
106
查看次数