I am using the SearchView component in an application, apparently on some devices it is causing crashes.
What do you think the problem might be and how could you solve it?
This is the SearchView that I have in my XML:
<SearchView
android:id="@+id/searchProduct"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:iconifiedByDefault="false"
android:layout_weight="1"
android:visibility="gone"
android:searchIcon="@null"
android:closeIcon="@null"
/>
My gradle:
minSdkVersion 15
targetSdkVersion 27
This is the activity SearchPromotionsActivity: The layout of this Activity contains a toolbar that is actually an XML that I add to the "SearchPromotionsActivity" layout, inside this is the searchView, an imageView with a lupita that opens the searchView, a textView that is the title and an imageView with back button, and finally a RecyclerView.
SearchView searchView;
private boolean pressed = false;
private ImageView imgSearch;
private InputMethodManager imm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_promotions);
searchView = findViewById(R.id.searchProduct);
imgSearch = findViewById(R.id.imgSearch);
imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
findViewById(R.id.svOpenSearchView).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Lo que hace esto es ocultar un imageView que contiene
//una imagen de una lupa y muestra el searchView
//también muestra y oculta el teclado
if(!pressed){
findViewById(R.id.searchProduct).setVisibility(View.VISIBLE);
findViewById(R.id.txtSearchPromotions).setVisibility(View.GONE);
imgSearch.setImageResource(R.drawable.closeblue);
searchView.requestFocus();
if(imm!=null){
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
}
pressed = true;
}else{
findViewById(R.id.searchProduct).setVisibility(View.GONE);
findViewById(R.id.txtSearchPromotions).setVisibility(View.VISIBLE);
imgSearch.setImageResource(R.drawable.search);
findViewById(R.id.ly).requestFocus();
if(imm!=null){
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
}
pressed = false;
}
}
});
//Acción del searchView
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (query != null) {
Intent intent = new Intent(SearchPromotionsActivity.this, SearchResultsActivity.class);
intent.putExtra("query", query);
if(imm!=null) {
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
}
startActivity(intent);
return true;
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
This is log:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{pe.beyond.movistar.prioritymoments/pe.beyond.movistar.prioritymoments.activities.startSection.SearchPromotionsActivity}: android.view.InflateException: Binary XML file line #0: Error inflating class android.widget.SearchView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Caused by android.view.InflateException: Binary XML file line #0: Error inflating class android.widget.SearchView
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.onCreateView(Unknown Source)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.onCreateView(Unknown Source)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:916)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:802)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(Unknown Source)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(Unknown Source)
at android.support.v7.app.AppCompatActivity.setContentView(Unknown Source)
at pe.beyond.movistar.prioritymoments.activities.startSection.SearchPromotionsActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:6021)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Caused by java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.onCreateView(Unknown Source)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.onCreateView(Unknown Source)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:916)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:802)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(Unknown Source)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(Unknown Source)
at android.support.v7.app.AppCompatActivity.setContentView(Unknown Source)
at pe.beyond.movistar.prioritymoments.activities.startSection.SearchPromotionsActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:6021)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.drawable.Drawable.setState(int[])' on a null object reference
at android.widget.SearchView.updateCloseButton(SearchView.java:852)
at android.widget.SearchView.updateViewsVisibility(SearchView.java:801)
at android.widget.SearchView.<init>(SearchView.java:367)
at android.widget.SearchView.<init>(SearchView.java:258)
at android.widget.SearchView.<init>(SearchView.java:254)
at java.lang.reflect.Constructor.newInstance(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.onCreateView(Unknown Source)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.onCreateView(Unknown Source)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:916)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:802)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(Unknown Source)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(Unknown Source)
at android.support.v7.app.AppCompatActivity.setContentView(Unknown Source)
at pe.beyond.movistar.prioritymoments.activities.startSection.SearchPromotionsActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:6021)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)