当我尝试在抽屉菜单项中引用actionView时,我得到空指针。我需要在我的nl.dionsegijn.steppertouch.StepperTouch
文件中引用视图locaton_item_layout.xml
(在MainActivity.java
中定义)。我试图运行以下代码来执行此操作。现在,变量actionViewLayout
返回的值为null。我不确定我在这里失踪了什么。请帮忙。
这是我的MainActivity.java
文件:
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_drawer, menu);
LinearLayout actionViewLayout = (LinearLayout) menu.findItem(R.id.item_with_action).getActionView();
stepperTouch = (StepperTouch) actionViewLayout.findViewById(R.id.stepperTouch);
return super.onCreateOptionsMenu(menu);
}
...
此处有activity_main_drawer.xml
个文件:
...
<item
android:id="@+id/item_with_action"
android:title="Show Results for"
app:actionLayout="@layout/location_item_layout">
app:showAsAction="always"
</item>
...
此处location_item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:id="@+id/actionviewlayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Now+"
android:textSize="30sp"/>
<nl.dionsegijn.steppertouch.StepperTouch
android:id="@+id/stepperTouch"
android:layout_width="100dp"
android:layout_height="40dp">
</nl.dionsegijn.steppertouch.StepperTouch>
</LinearLayout>
答案 0 :(得分:0)
您需要访问onPrepareOptionsMenu()
中的菜单项。您应该只在onCreateOptionsMenu()
中初始化菜单。来自the documentation:
系统调用onCreateOptionsMenu()后,它会保留一个实例 您填充的菜单,并且不会再次调用onCreateOptionsMenu() 除非由于某种原因菜单失效。但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态和 不要在活动生命周期内进行更改。
如果要根据发生的事件修改选项菜单 在活动生命周期中,你可以这样做 onPrepareOptionsMenu()方法。此方法将传递Menu对象 因为它当前存在,所以你可以修改它,如添加,删除或 禁用项目。 (片段还提供onPrepareOptionsMenu() 回调。)
因此,您需要将代码移至onPerepareOptionsMenu()
:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
LinearLayout actionViewLayout = (LinearLayout) menu.findItem(R.id.item_with_action).getActionView();
stepperTouch = (StepperTouch) actionViewLayout.findViewById(R.id.stepperTouch);
return super.onPrepareOptionsMenu(menu);
}