如何编辑右上角包含设置的列表?

How to edit the list in the right up corner that contains settings?

我试过了

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        Log.v(
                this.getClass().getName() + "!!!", 
                new Exception().getStackTrace()[0].getMethodName()
                );
        MenuItem m_item = (MenuItem)menu.findItem(R.id.action_settings);
        if(m_item != null)
            m_item.setTitle("Back to test");
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }

但它也总是得到 null.And,onCreate 似乎也将它设为 null。有没有我可以在运行时修改文本的功能???如果是这样,有没有简单的方法可以找到它?

而不是

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

做类似的事情:

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

其中 res/menu/menu_custom.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/menu_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/search"/>

    <item android:id="@+id/menu_settings"
          android:icon="@drawable/ic_action_settings"
          android:title="@string/settings" />
</menu>

这将在下拉列表中为您提供两个项目。您的 res/menu/settings.xml 中似乎只有一项。

您应该在菜单中添加项目 xml。您可以在文件夹 res/menu 中找到它。那里有 inflation.

的所有可用菜单

我想你只有一个。这是添加选项后的样子:

<?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/searchMain"    
    android:icon="@drawable/ic_action_search"
    app:showAsAction="ifRoom|withText"
    android:title="Search"/>
<item
    android:id="@+id/searchBarcodeScan"
    android:icon="@drawable/ic_launcher"
    app:showAsAction="always|withText"
    android:title="Scanner"/>
<item
    android:id="@+id/seeList"
    android:icon="@drawable/ic_launcher"
    app:showAsAction="ifRoom|withText"
    android:title="See list"/>
<item
    android:id="@+id/settings"
    android:icon="@drawable/ic_settings"
    app:showAsAction="ifRoom|withText"
    android:title="Settings"/>
</menu>

然后在您的 activity 中,您可以通过覆盖此方法并在其中执行操作来对所选选项做出反应:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.searchMain:
        doSomething();
        return true;

    case R.id.searchBarcodeScan:
        doSomething2();
        return true;

    case R.id.seeList:
        doSomething3();
        return true;

    case R.id.settings:
        doSomething4();
        return true;
    }
    return super.onOptionsItemSelected(item);
}       

编辑 为了在运行时更改菜单,您应该调用方法 invalidateOptionsMenu()。此方法将强制重新创建菜单,这一次将调用 onPrepareOptionsMenu 方法。您应该以这种方式在 Activity 中覆盖它:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(someCondition){
        getMenuInflater().inflate(R.menu.main_menu, menu);
    }
    else if(someOtherCondition){
        getMenuInflater().inflate(R.menu.other_menu, menu);
    }
    return true;
}