android - 按下主页按钮时如何关闭溢出菜单?

问题描述

当我们单击三个点时,我正在显示溢出菜单列表。当我按下主页按钮并再次启动应用程序时,溢出菜单列表仍在显示。如何关闭溢出菜单列表窗口?

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        Log.v("RAMKUMARV ONCREATEOPTION","RAMKUMARV");

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main,menu);

        // Inflate the menu; this adds items to the action bar if it is present.
        //  getMenuInflater().inflate(R.menu.menu_main,menu);
        MenuItem item = menu.findItem(R.id.action_settings);
        item.setVisible(true);
        return true;
    }

    @Override
    public boolean onoptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button,so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onoptionsItemSelected(item);
    }
}

Attached image

解决方法

您可以拥有一个活动字段,用于在 onCreateOptionsMenu() 被触发时存储选项/溢出菜单,然后在单击主页按钮时使用 close() 方法关闭菜单,即在 {{1 }}。

onUserLeaveHint()
,

MainActivity 级别声明菜单项,如下所示:

public class MainActivity extends AppCompatActivity {

    private MenuItem overflowItem;

    ...

}

现在您应该实例化 onCreateOptionsMenu 方法中的对象,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    ...

    overflowItem = menu.findItem(R.id.action_settings);
    overflowItem.setVisible(true);
    return true;
}

然后你可以使用onPause方法设置overflowItem不再可见:

@Override
public void onPause() {
    super.onPause();
    overflowItem.setVisible(false);
}

最后记住用 MenuItem item 替换您的 overflowItem 对象。

,

要关闭溢出菜单,您只需在 Activity 中调用 closeOptionsMenu()

closeOptionsMenu()

以编程方式关闭选项菜单。如果选项菜单是 已经关闭,这个方法什么都不做。

您可以在 onPause() 方法中调用它,如下所示:

@Override
public void onPause() {
   super.onPause();
   closeOptionsMenu();
}

或者如果您只想在用户按下 Home 键时调用它,您可以使用 onUserLeaveHint(),如下所示:

@Override
protected void onUserLeaveHint() {
  super.onUserLeaveHint();
  closeOptionsMenu();
}