프로그래밍 방식으로 SearchView를 닫는 방법은 무엇입니까?
현재 SearchView
내 앱의 작업 표시 줄에이 있습니다. 검색 아이콘을 클릭하면 SearchView
확장되고 예상대로 키보드가 팝업됩니다. SearchView
상자 에서 "X"를 클릭하면 SearchView
예상대로 가 닫힙니다 . 그러나 SearchView
가 활성화되고 "뒤로"버튼을 누르면 내 앱이 종료됩니다. 이것은 올바른 동작이지만 지금 시도하고있는 것은 뒤로 버튼 누름을 캡처하고이 표시 SearchView
될 때 (내 앱이 아닌) 닫도록 하는 것 SearchView
입니다. SearchView
OnCloseListener()
뒤로 버튼을 누를 때 프로그래밍 방식으로 호출하는 방법이 있습니까? 예를 들면 다음과 같습니다.
// On a back button press, if we are currently searching,
// close the SearchView. Otherwise, invoke normal back button
// behavior.
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isSearchViewVisible) {
SearchView searchView = (SearchView) menu.findItem(R.id.searchBox)
.getActionView();
// This method does not exist
searchView.invokeClose();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@MarcinOrlowski 답변을 기반으로 다음을 사용할 수도 있습니다.
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
} else {
super.onBackPressed();
}
}
사용하다
searchView.setIconified(true)
또한 MenuItemCompat.collapseActionView 를 사용했습니다.
MenuItemCompat.collapseActionView(menuItem)
이를 수행하는 간단한 방법이 있습니다.
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.onActionViewCollapsed();
} else {
super.onBackPressed();
}
}
또는 다음을 사용하십시오.
@Override
public void onBackPressed() {
searchView.onActionViewCollapsed();
super.onBackPressed();
}
이렇게하면 뒤로를 누르기 전에 searchView가 축소되고 뒤로 작업이 호출됩니다.
두 솔루션 모두 작동합니다.
이것은 나를 위해 그것을하는 유일한 것입니다.
toolbar.collapseActionView();
뒤로 버튼 재정의를 가로 채려면 onBackPressed()
( 문서 참조 )
@Override
public void onBackPressed() {
if (isSearchViewVisible) {
SearchView searchView = (SearchView) menu.findItem(R.id.searchBox)
.getActionView();
// This method does not exist
searchView.invokeClose();
} else {
super.onBackPressed();
}
}
편집 :
문서는 말한다 :
필요한 경우 MenuItem에서 expandActionView () 및 collapseActionView ()를 호출하여 자체 코드에서 작업보기를 확장하거나 축소 할 수 있습니다.
searchView에 입력이있는 경우
mSearchView.setIconified(true);
텍스트 만 지워집니다.
searchView를 닫는 올바른 방법은 다음과 같습니다.
mSearchView.onActionViewCollapsed();
사용하다:
searchView.setIconified(true);
내가 선호 !searchView.isIconified()
이상 if(isSearchViewVisible)
안에 onBackPressed()
당신이 당신의 추가 조각이있을 때 옵션 2 일을하지 않는 방법 fragmentmanager's
backstack
당신이 다시 버튼을 누를 때 보여주고 싶다고.
내 방식 :
- CustomSearchView 클래스 만들기
public class CustomSearchView extends SearchView{ public CustomSearchView(final Context context) { super(context); this.setIconifiedByDefault(true); } @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { this.onActionViewCollapsed(); } return super.dispatchKeyEventPreIme(event); } }
- Add actionViewClass
<item android:id="@+id/menu_search" android:title="@string/menu_search" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="com.myapp.CustomSearchView"/>
- Create CustomSearchView into onCreateOptionsMenu
CustomSearchView searchView = (CustomSearchView)menu.findItem(R.id.menu_search).getActionView();
If you are not use any function in onBackPressed()
method ,remove it from your Activity.So that the SearchView
itself handle the onBackPress
event.
I am using SearchView as
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchview = (SearchView) MenuItemCompat.getActionView(searchItem);
searchview.setIconifiedByDefault(true);
searchview.setOnQueryTextListener(this);
searchview.setSubmitButtonEnabled(true);
searchview.setQueryHint("Search Here");
super.onCreateOptionsMenu(menu, inflater);
}
and my menu.xml as follows
<item
android:id="@+id/action_search"
android:icon="@drawable/search_tool"
android:orderInCategory="1"
android:title="Search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView"/>
Also you can use collapseActionView
. It automatically handle back button, collapsing SearchView
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_magnify"
android:title="@string/action_title_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
No need to use onBackPressed()
method for this!! I found the solution, do only as I mentioned below so that the SearchView itself handle the on back button press event.
Inside your onCreateOptionsMenu()
method,
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem menuItem = menu.findItem(R.id.action_search);
SearchView searchview = (SearchView) menuItem.getActionView();
searchview.setIconifiedByDefault(true);
searchview.setQueryHint("Enter your keyword");
searchview.setOnQueryTextListener(this);
super.onCreateOptionsMenu(menu, inflater);
}
In your menu.xml add showAsAction attribute and set its values as "always|collapseActionView"
<item
android:id="@+id/action_search_item"
android:title="Search"
android:icon="@drawable/ic_search_logo"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
And you're ready to go ;)
P.S. - I was searching for a solution from a long time and now I found one, hope it helps you all.
참고URL : https://stackoverflow.com/questions/17506230/how-do-i-close-a-searchview-programmatically
'Nice programing' 카테고리의 다른 글
서버가 이미 실행 중입니다. (0) | 2020.11.25 |
---|---|
Android 진행률 표시 줄의 높이를 설정하는 방법은 무엇입니까? (0) | 2020.11.25 |
코드 생성 UIView에 UIBezierPath 그리기 (0) | 2020.11.25 |
입력을 대문자로 변경 (0) | 2020.11.25 |
TypeError : db.collection이 함수가 아닙니다. (0) | 2020.11.25 |