getActionView()总是返回null

问题描述:

我想将EditText添加到我的操作栏。但是,当我尝试使用getActionView()搜索该项目时,它始终返回null。getActionView()总是返回null

我刚刚花了5个小时在网上搜索解决方案,但是我发现的所有内容都与SearchView相关,它不适用于我的案例。

看来我需要使用MenuItemCompat.getActionView(),因为我的minSDK是8,但它总是返回null。

另一种解决方案建议更改proguard规则,但这并没有帮助。

请帮忙。

menu_email.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context="il.co.talkie.q.SettingsEmailActivity"> 

<item 
    android:id="@+id/action_save" 
    android:title="@string/save_action" 
    android:orderInCategory="100" 
    app:showAsAction="always" 
    tools:ignore="AppCompatResource"/> 

<item 
    android:id="@+id/action_err_email" 
    android:title="@string/email_err_prompt" 
    android:visible="true" 
    android:orderInCategory="1" 
    app:showAsAction="always" 
    tools:ignore="AppCompatResource" 
    android:actionLayout="@layout/menu_header" 
    > 
</item> 

</menu> 

menu_header.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 

android:orientation="horizontal" 
android:layout_width="wrap_content" 
android:layout_height="match_parent" 

android:background="@color/simple_blue"> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editText" 
    android:text="@string/service_providers_menu_header" 
    android:layout_weight="1" 
    android:editable="false" 
    android:inputType="none" /> 

</LinearLayout> 

,并从该活动的相关代码

Java代码

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.menu_email, menu); 

    MenuItem email_err_menu = menu.findItem(R.id.action_err_email); 

    View v = (View) MenuItemCompat.getActionView(email_err_menu); 
... 
    return true; 
} 

上面的物体V总是空,如果你使用的是支持库

尝试app:actionLayout="@layout/menu_header"而不是android:actionLayout="@layout/menu_header"

+0

是的。这做到了。非常感谢 – Zvi