앱 호환성 이후 Searchview가 작동하지 않습니다.
내 검색보기가 더 이상 작동하지 않습니다.
Process: com.laurenswuyts.witpa, PID: 26666
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference
at com.laurenswuyts.witpa.Activities.Events.EventActivity.onCreateOptionsMenu(EventActivity.java:75)
at android.app.Activity.onCreatePanelMenu(Activity.java:2820)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275)
at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
at android.support.v7.widget.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:49)
at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:459)
at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:69)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
그래서 내가 가지고있는 동안 searchview에 대한 nullpointer :
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.event_main, menu);
// Get the SearchView and set the searchable configuration
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}
그리고 내 메뉴에는 다음이 있습니다.
<!-- Search Widget -->
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/ic_action_search"
app:showAsAction="always"
android:actionViewClass="android.support.v7.widget.SearchView"/>
왜 더 이상 작동하지 않는지 모르겠지만 app compat 21을 사용하기 시작한 이후로 발생했습니다.
문안 인사,
사용자 정의 app
네임 스페이스를 사용해보십시오 actionViewClass
.
app:actionViewClass="android.support.v7.widget.SearchView"/>
앱 폴더 안에있는 proguard-rules.pro 파일에 다음 줄을 추가 합니다.
-keep class android.support.v7.widget.SearchView {*; }
proguard를 활성화하고 SearchView
클래스를 스트라이핑하는 경우에도 발생할 수 있습니다 . 클래스를 유지하려면 proguard 설정을 수정해야합니다.
자세한 내용은 이 질문을 참조하십시오.
Simas 답변에 대한 추가 정보입니다. 나는 이것을 다른 대답 ( https://stackoverflow.com/a/33400808/4949671 ) 에서 찾았으며 내 예외를 해결하는 데 매우 중요했습니다.
그렇지
app:actionViewClass
않습니다.android:actionViewClass
"실행 및 오류"를 재생 한 후 해결책을 찾았습니다. UI 요소가 오류의 원인이 아닌 것 같습니다. 검색을 QueryListener로 설정하면 잘 작동합니다. 다음은 몇 가지 코드입니다.
SearchBar를 포함하는 활동 :
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.d(TAG, "onQueryTextSubmit ");
return false;
}
@Override
public boolean onQueryTextChange(String s) {
Log.d(TAG, "onQueryTextChange ");
return false;
}
});
return true;
}
searchable.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint"/>
그리고 menu.xml 의 "SearchBar"
<item
android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
...
그리고 마지막으로, 매니페스트 (하지만 명확해야합니다) ...
<activity
android:name=".activities.MainActivity"
android:label="@string/title_activity_main">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
추가 정보-> 문서
If you use progurd then you have to add the following line into proguard-rules.pro file
-keep public class android.support.v7.widget.** { *; }
or
-keep class android.support.v7.widget.SearchView { *; }
If if you minify in your build types like that then you need to add a single line your 'proguard-rules.pro' file.
buildTypes {
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Add line your 'proguard-rules.pro' file.
-keep class android.support.v7.widget.SearchView { *; }
After you've clicked on a result, your app is expecting that an operation has not completed and is trying to go further into an Intent argument.
SearchView.OnSuggestionListener
and return true
which notifies your app that the click operation has completed.
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionClick(int position) {
return true;
}
@Override
public boolean onSuggestionSelect(int position) {
return false;
}
});
Issue occurs if Proguard is enabled. can be fixed by adding this to proguard rules
-keep class android.support.v7.widget.SearchView { *; }
참고URL : https://stackoverflow.com/questions/27049294/searchview-doesnt-work-since-app-compat
'Programing' 카테고리의 다른 글
ExecJS :: ProgramError : 예상치 못한 토큰 구두점«(», 레이크 자산 실행시«:»예상 구두점 : 프로덕션에서 사전 컴파일 (0) | 2020.11.29 |
---|---|
배열의 모든 문자열 트리밍 (0) | 2020.11.29 |
Python의 NIC에서 IP 주소를 얻으려면 어떻게해야합니까? (0) | 2020.11.29 |
Windows에서 긴 경로를 삭제하는 방법. (0) | 2020.11.29 |
Python 2.x 문제 및 지뢰 (0) | 2020.11.29 |