web-dev-qa-db-ja.com

android)で検索ビューの戻るボタンを処理する方法

アクションバーに検索ビューがあるアプリケーションを開発しましたが、フィルターを完全に検索すると問題が発生しましたが、戻るボタンを押してもフィルターデータが表示されているので、アクションバー検索の戻るボタンのイベントは何ですか?見る。?

enter image description here

私の検索コードは

SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(Menus.SEARCH));
    searchView.setQueryHint(this.getString(R.string.search));
    editSearch = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
    editSearch.setHintTextColor(getResources().getColor(R.color.white));
    searchView.setOnQueryTextListener(OnQuerySearchView);


 private OnQueryTextListener OnQuerySearchView = new OnQueryTextListener() {

    @Override
    public boolean onQueryTextSubmit(String newText) {
        if (TextUtils.isEmpty(newText)) {
            listAllContact.clearTextFilter();
        } else {
            listAllContact.setFilterText(newText.toString());
        }
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        String text = editSearch.getText().toString()
                .toLowerCase(Locale.getDefault());
        adapter.filter(text);
        return true;
    }

};

アダプターのフィルター方法

public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());
    propertyList.clear();

    if (charText.length() == 0) {
       propertyList.addAll(arrayList);
    notifyDataSetChanged();

    } else {
        for (ContactProperty p : arrayList) {
            if (p.getFriendName().toLowerCase(Locale.getDefault())
                    .contains(charText)) {
                propertyList.add(p);
            }
        }
        notifyDataSetChanged();

    }
11

これのリスナーを次のように追加できます:

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
    searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do whatever you need
            return true; // KEEP IT TO TRUE OR IT DOESN'T OPEN !!
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do whatever you need
            return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE!
        }
    });
13
Narendra

メニューレイアウトに「collapseActionView」属性を配置するだけで済みます

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:id="@+id/menu_item_search"
        Android:title="@string/search"
        Android:iconifiedByDefault="true"
        Android:icon="@drawable/ic_action_search" 
        app:actionViewClass="Android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView"/> <--this one
</menu>

それはあなたがそれ自体で探している機能をあなたに与えるでしょう。

6
Rodrigo de Blas

これにより、フォーカスが失われたときに検索アクションアイテムが折りたたまれます。

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

    // be sure to use 'setOnQueryTextFocusChangeListener()'
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View v, boolean newViewFocus)
        {
            if (!newViewFocus)
            {
                //Collapse the action item.
                searchItem.collapseActionView();
                //Clear the filter/search query.
                myFilterFunction("");
            }
        }
    });

    return super.onCreateOptionsMenu(menu);
}

これは、戻るボタンを押したときに検索アイテムのアクションビューを正常に折りたたむことができる唯一の方法です。

4
Sakiboy

これを試して:

  MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when collapsed
            return true;  // Return true to collapse action view
        }

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

メニフェストファイル

アクションバーの戻るボタンを処理するために-アクティビティ宣言部分は、最初に親アクティビティを定義する必要があります。

お気に入り-

        Android:name="com.Android.unum.ui.SelfServiceActivity"
        Android:label="@string/self_service"
        Android:parentActivityName="com.Android.unum.ui.DashboardActivity" >
        <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value="com.Android.unum.ui.DashboardActivity" />

アクティビティ内にあるonOptionsItemSelectedメソッドを編集します

NavUtils.navigateUpFromSameTask(this);

// public static voidナビゲーターUpFromSameTask(アクティビティsourceActivity)// sourceActivityはこの呼び出しで終了します。

注:このメソッドは、sourceActivityと対応する親が同じタスク内にある場合にのみ使用する必要があります。

詳細情報:-

http://developer.Android.com/reference/Android/support/v4/app/NavUtils.html

お気に入り

@オーバーライド

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case Android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}
1
Himanshu

そのsearchViewナビゲーションクリックの直接イベントは取得されません。MenuItamのインターフェイスがあり、名前は「MenuItem.OnActionExpandListener()」です。このインターフェースを使用することにより、展開および折りたたまれたコールバックを取得できます。

以下のスニペットコードを使用して、

MenuItem searchMenuItem = menu.findItem(R.id.action_search);
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                return true;
            }
        });
0
Krunal Shah