如何从外部扩展 SupportActionBar 菜单 Activity
How to inflate SupportActionBar menu from outside Activity
我将视图与 Activity 分离,并且我有一个单独的 class 用于所有 UI 相关操作。我想在那里实现的一项操作是为 Action Bar 扩充菜单。我尝试做这些事情,但 none 有效。
fun displayMenu() {
rootView.toolbar.inflateMenu(R.menu.my_menu)
rootView.toolbar.setOnMenuItemClickListener { item ->
if (item.itemId == R.id.action_one) {
listener.onActionOne()
}
true
}
}
我试过这个:
activity.menuInflater.inflate(R.menu.my_menu, rootView.toolbar.menu)
还有这个:
rootView.toolbar.inflateMenu(R.menu.my_menu)
但其中 none 个可以完成工作。我怎样才能使这个菜单膨胀?
我不知道如何使用 Kotlin 编写代码。
这就是我在 Java 中的做法。只需覆盖 Activity class 中的 onCreateOptionsMenu()
方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
}
都是我的愚蠢错误。
activity.menuInflater.inflate(R.menu.my_menu, rootView.toolbar.menu)
工作得很好。请记住在 Activity.onCreateOptionMenu 期间或之后调用它。使它起作用的完整示例是这样的:
public class MyActivity extends AppCompatActivity {
@Inject
MyView myView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(myView.getRootView());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
myView.displayMenu();
return super.onCreateOptionsMenu(menu);
}
}
public class MyViewImpl implements MyView {
@Override
public void displayMenu() {
activity.getMenuInflater().inflate(
R.menu.categories_modification_menu,
rootView.findViewById(R.id.toolbar).getMenu()
)
}
}
我之前使用了 Activity.onCreate 的 displayMenu()...抱歉浪费您的时间,特别是我没有 post 这部分,因为我认为它与问题无关...
我将视图与 Activity 分离,并且我有一个单独的 class 用于所有 UI 相关操作。我想在那里实现的一项操作是为 Action Bar 扩充菜单。我尝试做这些事情,但 none 有效。
fun displayMenu() {
rootView.toolbar.inflateMenu(R.menu.my_menu)
rootView.toolbar.setOnMenuItemClickListener { item ->
if (item.itemId == R.id.action_one) {
listener.onActionOne()
}
true
}
}
我试过这个:
activity.menuInflater.inflate(R.menu.my_menu, rootView.toolbar.menu)
还有这个:
rootView.toolbar.inflateMenu(R.menu.my_menu)
但其中 none 个可以完成工作。我怎样才能使这个菜单膨胀?
我不知道如何使用 Kotlin 编写代码。
这就是我在 Java 中的做法。只需覆盖 Activity class 中的 onCreateOptionsMenu()
方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
}
都是我的愚蠢错误。
activity.menuInflater.inflate(R.menu.my_menu, rootView.toolbar.menu)
工作得很好。请记住在 Activity.onCreateOptionMenu 期间或之后调用它。使它起作用的完整示例是这样的:
public class MyActivity extends AppCompatActivity {
@Inject
MyView myView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(myView.getRootView());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
myView.displayMenu();
return super.onCreateOptionsMenu(menu);
}
}
public class MyViewImpl implements MyView {
@Override
public void displayMenu() {
activity.getMenuInflater().inflate(
R.menu.categories_modification_menu,
rootView.findViewById(R.id.toolbar).getMenu()
)
}
}
我之前使用了 Activity.onCreate 的 displayMenu()...抱歉浪费您的时间,特别是我没有 post 这部分,因为我认为它与问题无关...