Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在API级别8+;中支持searchItem.setOnActionExpandListener;?_Android_Android Support Library_Searchview_Android Actionbar Compat_Android Actionbaractivity - Fatal编程技术网

Android 如何在API级别8+;中支持searchItem.setOnActionExpandListener;?

Android 如何在API级别8+;中支持searchItem.setOnActionExpandListener;?,android,android-support-library,searchview,android-actionbar-compat,android-actionbaractivity,Android,Android Support Library,Searchview,Android Actionbar Compat,Android Actionbaractivity,我正在使用ActionBarActivity,如何在API级别8+中支持searchItem.setOnActionExpandListener?它说,最低API级别14是必需的 下面是我的代码,目前我正在抑制错误,并且仅当API大于等于14时才允许执行代码 @SuppressLint("NewApi") public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.action_bar_

我正在使用ActionBarActivity,如何在API级别8+中支持searchItem.setOnActionExpandListener?它说,最低API级别14是必需的

下面是我的代码,目前我正在抑制错误,并且仅当API大于等于14时才允许执行代码

@SuppressLint("NewApi")
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.action_bar_home_screen, menu);
    searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat
                .getActionView(searchItem);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            searchItem.setOnActionExpandListener(new OnActionExpandListener() {

                @Override
                public boolean onMenuItemActionExpand(MenuItem item) {
                    hideProgressBar();
                    return true;
                }

                @Override
                public boolean onMenuItemActionCollapse(MenuItem item) {
                    showProgressBar();
                    selectItem(lastSelectedItemPosition);
                    return true;
                }
            });
        }
}

您不能这样做,MenuItem.OnActionExpandListener接口本身也可以从API级别14获得。如果您的问题与搜索相关:

使用,这是
OnActionExpandedListener
的后端口,您可以添加
ViewTreeObserver
来跟踪
android.support.v7.appcompat.R.id.search\u edit\u frame
。你可以在这里查看我的答案:

这是另一个问题的答案副本:

我发现
MenuItemCompat.setOnActionExpandListener(…)
如果未通过以下步骤,则无法工作:

    searchItem
            .setShowAsAction(MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
                    | MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
但这正在改变SearchView,并将抽屉切换替换为后退箭头

我希望保留原始视图,仍然跟踪展开/折叠状态,并使用支持的搜索视图

解决方案:

android.support.v7.widget.SearchView
更改LinearLayout视图的视图状态时,id
android.support.v7.appcompat.R.id.search\u edit\u frame
,可见性值将从
view.VISIBLE
更改为
view.GONE
,反之亦然。因此,我添加了ViewTreeObserver来跟踪搜索编辑框的可见性更改

menu_search.xml:

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

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="@string/search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always"/>

</menu>

我只是想知道searchview什么时候被扩展,什么时候被折叠。正如我在文档中看到的,整个扩展过程是在API级别14中引入的。我一直在寻找ianhanniballake的答案。无论如何,谢谢。是的,我在再次发表评论后看到了它,很好,我没有听说这个界面:)我在这里回答了问题:
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuItem;

..........

private View mSearchEditFrame;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search, menu);
    MenuItem searchItem = (MenuItem) menu.findItem(R.id.action_search);

    SearchView searchView = (SearchView) MenuItemCompat
            .getActionView(searchItem);
    searchView.setSubmitButtonEnabled(false);
    mSearchEditFrame = searchView
            .findViewById(android.support.v7.appcompat.R.id.search_edit_frame);

    ViewTreeObserver vto = mSearchEditFrame.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        int oldVisibility = -1;

        @Override
        public void onGlobalLayout() {

            int currentVisibility = mSearchEditFrame.getVisibility();

            if (currentVisibility != oldVisibility) {
                if (currentVisibility == View.VISIBLE) {
                    Log.v(TAG, "EXPANDED");
                } else {
                    Log.v(TAG, "COLLAPSED");
                }

                oldVisibility = currentVisibility;
            }

        }
    });

    return super.onCreateOptionsMenu(menu);
}