片段中未调用onOptionsItemSelected

时间:2019-04-15 20:28:24

标签: java android

由于某种原因,当我单击与其关联的按钮时,我的optionItemSelected没有被调用。木材日志没有被调用,但是在我单击按钮后的那一刻就会出现在日志中:

D/ViewRootImpl@ba4d36e[POIHistoryFlowActivity]: ViewPostImeInputStage processPointer 0
D/ViewRootImpl@ba4d36e[POIHistoryFlowActivity]: ViewPostImeInputStage processPointer 1

这是我的代码:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
        inflater.inflate(R.menu.activity_recent_destinations, menu);
        Timber.d("Menu was inflated");
    }

    @Override
    public boolean onOptionsItemSelected(final MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_action_item_clear:
                Timber.d("Clear button was clicked");
                // clear the destinations
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

在类似的片段中,父级的活动不会覆盖onCreateOptionsItem()onOptionsItemSelected(),但是它们的关联按钮可以工作,而在此片段中,它们不起作用,并且在我使用的调试器将所有内容组合在一起后根本原因可能是损失。任何帮助我都会非常感激!

更新: activity_recent_destinations.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_action_item_clear"
        android:title="@string/menu_item_title_clear"
        app:actionLayout="@layout/action_item_clear"
        app:showAsAction="always" />
</menu>

1 个答案:

答案 0 :(得分:1)

您正在为此项目使用“操作布局”。这就像正常视图一样,单击它不会触发onOptionsItemSelected回调。您必须获得对布局本身的引用并添加一个点击侦听器:

@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    inflater.inflate(R.menu.activity_recent_destinations, menu);
    MenuItem item = menu.findItem(R.id.menu_action_item_clear);
    View actionView = item.getActionView();
    // Set the listen on the root view or any children if necessary
    actionView.setOnClickListener(...);
}