アクションバーに検索ビューがあるアプリケーションを開発しましたが、フィルターを完全に検索すると問題が発生しましたが、戻るボタンを押してもフィルターデータが表示されているので、アクションバー検索の戻るボタンのイベントは何ですか?見る。?
私の検索コードは
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();
}
これのリスナーを次のように追加できます:
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!
}
});
メニューレイアウトに「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>
それはあなたがそれ自体で探している機能をあなたに与えるでしょう。
これにより、フォーカスが失われたときに検索アクションアイテムが折りたたまれます。
@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);
}
これは、戻るボタンを押したときに検索アイテムのアクションビューを正常に折りたたむことができる唯一の方法です。
これを試して:
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;
}
});
メニフェストファイル
アクションバーの戻るボタンを処理するために-アクティビティ宣言部分は、最初に親アクティビティを定義する必要があります。
お気に入り-
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);
}
その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;
}
});