【问题标题】:Accessing actionView in the ActionBar在 ActionBar 中访问 actionView
【发布时间】:2012-10-03 14:07:11
【问题描述】:

我想在我的操作栏中创建一个始终展开的搜索窗口。我正在使用 ActionBar Sherlock 库。根据我发现的一些示例,这段代码应该可以解决问题

    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = this.getSupportMenuInflater();
    inflater.inflate(R.menu.action_bar, menu);

    MenuItem searchItem = menu.findItem(R.id.action_bar_search);
    SearchView searchView = (SearchView) searchItem.getActionView();  //returns null
    searchView.setIconifiedByDefault(false);


    return true;
}

然而,getActionView();返回空值。 是否有其他方法可以访问 searchView,以便我可以调用 setIconifiedByDefault(false);方法 ? 我想在xml文件中保留searchView的定义如下

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/action_bar_search"
          android:title="@string/action_bar_search"
          android:icon="@drawable/ic_magnify"
          android:showAsAction="always"
          android:actionViewClass="android.widget.SearchView" />
    </menu>

感谢您的帮助

【问题讨论】:

    标签: android android-actionbar actionbarsherlock


    【解决方案1】:

    您的问题可能与您的 XML 有关。将android:actionViewClass="android.widget.SearchView" 更改为android:actionViewClass="com.actionbarsherlock.widget.SearchView"

    【讨论】:

    • 我还没试过,但听起来很合乎逻辑。非常感谢您发现它。
    【解决方案2】:

    您确定您使用的是正确的R.menu... 链接吗?也尝试使用getMenuInflater(); 而不是getSupportMenuInflater();

    【讨论】:

    • 菜单定义在 res/menu 的 action_bar.xml 文件中,加上 findItem() 方法确实返回了正确的(我认为)对象。
    • 我正在使用 getSupportMenuInflater();调用 ActionBarSherlock 库的 menuInflater,但它的行为应该与股票版本完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多