如何从外部Activity扩展SupportActionBar菜单

时间:2018-12-13 13:25:59

标签: java android kotlin android-actionbar android-toolbar

我从“活动”中分离了视图,并为所有与UI相关的操作提供了单独的类。我要实现的一项操作是为“动作栏”添加菜单。我尝试做类似的事情,但没有一个起作用。

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)

但是这些都无法完成工作。如何为这个菜单充气?

2 个答案:

答案 0 :(得分:2)

这都是我愚蠢的错误。

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()...很抱歉浪费您的时间,尤其是我没有发布此部分,因为我认为这与问题无关...

答案 1 :(得分:1)

我不知道如何用Kotlin进行编码。 这就是我在Java中所做的。在Activity类中只是覆盖onCreateOptionsMenu()方法。

@Override
public boolean onCreateOptionsMenu(Menu menu) {

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

}