프로그램 방식으로 SearchView를 열려면 어떻게 해야 합니까?
작업 표시줄에는 'SearchView'라는 위젯이 있습니다.사용하지 않을 때는 다음과 같이 표시됩니다.
사용중에는, 다음과 같이 표시됩니다.
(물론 프로그래밍 방식으로) 검색 보기를 엽니다('사용 중'으로 설정).
다음과 같은 몇 가지 기능을 시도했습니다.
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(this);
searchView.performClick();
searchView.requestFocus();
하지만 그 중 어느 것도 효과가 없었다...
XML 내의 SearchView:
<item android:id="@+id/menu_search"
android:title="Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
를 전개합니다.SearchView
와 함께
searchView.setIconified(false);
와 함께 쓰러뜨리고
searchView.setIconified(true);
값을 변경해야 합니다.android:showAsAction
부터ifRoom|collapseActionView
로.always
.그SearchView
의 속성android:iconifiedByDefault
그래야 한다true
디폴트값입니다.디폴트값이 아닌 경우 사용자는 이 값을 축소할 수 없습니다.SearchView
프로그래밍 방식으로 확장되고 나서요.
전화 걸기expandActionView()
메뉴 항목, ActionViewExpanded()가 아닌 ActionView의 onActionViewExpanded()가 아닙니다.
저는 좋아요.
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();
필요한 경우에만 지원 라이브러리를 사용하려면 다음과 같이 하십시오.
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
if (Utils.hasIceCreamSandwich())
searchMenuItem.expandActionView();
else MenuItemCompat.expandActionView(searchMenuItem);
그렇지 않으면 간단히 이것을 해라.
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
MenuItemCompat.expandActionView(searchMenuItem);
늦은 건 알지만
expandActionView()를 호출하여 열고 collapseActionView()를 호출하여 닫습니다.getActionView()를 통해 실제 액션뷰에서 requestFocus()를 호출하여 검색뷰에 포커스를 부여할 수 있습니다.
위해서androidx.appcompat.widget.SearchView
,
searchView.setIconifiedByDefault(true) // didn't work
searchMenuItem.expandActionView() // didn't work
MenuItemCompat.expandActionView(searchMenuItem) // didn't work
searchView.onActionViewExpanded() // didn't work
다음은 나에게 효과가 있었다.
searchView.findViewById<View>(R.id.search_button).performClick()
마티아스 도굴꾼의 답변 확대:
검색값을 보관하고 사용자가 다른 fragment에서 돌아온 후 설정하기 위해 목록 fragment를 원했습니다.
if (myViewModel.filterTextSaved.isNotEmpty()) { // Kotlin, storing state in ViewModel
searchItem.expandActionView() // needs to come first, otherwise empty text
theTextArea.setText(courseViewModel.filterTextOnClick)
}
그리고 내가 보관하고 있는 메뉴는always|collapseActionView
그렇지 않으면 사용자가 텍스트를 삭제해도 열린 상태로 유지됩니다.
확장 상태를 복원해야 하므로 프로그래밍 방식으로 Search View를 확장하는 솔루션을 찾고 있었습니다.한 가지 해결책이 통하지 않았다.Handler().post()를 사용하는 경우는 제외합니다.post()를 사용하는 것이 좋지 않다는 것을 알고 있습니다.하지만 저는 레거시 프로젝트를 진행 중이고 이 회피책은 받아들일 수 있습니다.
변수 블록 초기화
val searchMenuItem = menu.findItem(R.id.menu_search_item)
val searchView = searchMenuItem.actionView as SearchView
Search View를 전개하는 방법
Handler().post {
searchMenuItem.expandActionView()
}
post()가 도움이 되는 이유: 앱이 제대로 작성되지 않으면 UI 스레드에서 너무 많은 작업을 수행할 수 있습니다.post()는 UI 스레드를 실행할 수 있을 때 코드 블록이 실행되도록 합니다.즉, 이 회피책을 사용하는 경우 SearchView 확장 간에 약간의 지연이 발생할 수 있습니다.
를 열려면searchView
유지close_button
결국 이것을 에 사용하다onCreate
:-
searchView.findViewById(R.id.search_button).performClick();
언급URL : https://stackoverflow.com/questions/14235677/how-do-i-open-the-searchview-programmatically
'programing' 카테고리의 다른 글
MySQL에서 SELECT 문을 사용하여 테이블 이름 가져오기 (0) | 2023.02.01 |
---|---|
Seaborn 플롯을 파일에 저장하는 방법 (0) | 2023.02.01 |
MySQLi가 준비한 문 오류 보고 (0) | 2023.02.01 |
JPA를 사용한 맵 저장 (0) | 2023.02.01 |
VueJs, ReferenceError: google이 정의되지 않았습니다. (0) | 2023.02.01 |