由于某种原因,当我单击与其关联的按钮时,我的 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);
}
}
在类似的 fragment 中,父级的 Activity 不会覆盖 onCreateOptionsItem()
或 onOptionsItemSelected()
,但它们的关联按钮在此 fragment 中不起作用,并且在之后用调试器梳理所有内容,我不知道根本原因可能是什么。任何帮助我都会非常感激!
更新: 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>
最佳答案
您正在为此项目使用“操作布局”。这就像普通 View 一样,点击它不会触发 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 listener on the root view or any children if necessary
actionView.setOnClickListener(...);
}
关于java - onOptionsItemSelected 未从 fragment 内调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696777/