MaterialSearchBar
MaterialSearchBar copied to clipboard
com.mancj.materialsearchbar.EditTextStyleHelper$EditTextStyleChangeError
com.mancj.materialsearchbar.EditTextStyleHelper$EditTextStyleChangeError: Error applying changes to android.support.v7.widget.AppCompatEditText{e5cf517 VFED..CL. ......I. 0,0-0,0 #7f090170 app:id/mt_editText}
at com.mancj.materialsearchbar.EditTextStyleHelper.apply(EditTextStyleHelper.java:125)
at com.mancj.materialsearchbar.EditTextStyleHelper.applyChanges(EditTextStyleHelper.java:40)
at com.mancj.materialsearchbar.MaterialSearchBar.setupSearchEditText(MaterialSearchBar.java:317)
at com.mancj.materialsearchbar.MaterialSearchBar.postSetup(MaterialSearchBar.java:281)
at com.mancj.materialsearchbar.MaterialSearchBar.init(MaterialSearchBar.java:223)
at com.mancj.materialsearchbar.MaterialSearchBar.<init>(MaterialSearchBar.java:126)
at java.lang.reflect.Constructor.newInstance(Native Method)
at android.view.LayoutInflater.createView(LayoutInflater.java:638)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:783)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:723)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:817)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:434)
at com.huaweisoft.ihserviceapp.fragment.BaseFragment.createView(BaseFragment.java:88)
at com.huaweisoft.ihserviceapp.fragment.BaseFragment.onCreateView(BaseFragment.java:62)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:66)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1241)
at android.app.Activity.performStart(Activity.java:6387)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2414)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
at android.app.ActivityThread.access$900(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5621)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
Caused by: java.lang.NoSuchFieldException: No field mCursorDrawable in class Lhuawei/com/android/internal/widget/HwEditor; (declaration of 'huawei.com.android.internal.widget.HwEditor' appears in /system/framework/hwEmui.jar)
at java.lang.Class.getDeclaredField(Native Method)
at com.mancj.materialsearchbar.EditTextStyleHelper.apply(EditTextStyleHelper.java:88)
at com.mancj.materialsearchbar.EditTextStyleHelper.applyChanges(EditTextStyleHelper.java:40)
at com.mancj.materialsearchbar.MaterialSearchBar.setupSearchEditText(MaterialSearchBar.java:317)
at com.mancj.materialsearchbar.MaterialSearchBar.postSetup(MaterialSearchBar.java:281)
at com.mancj.materialsearchbar.MaterialSearchBar.init(MaterialSearchBar.java:223)
at com.mancj.materialsearchbar.MaterialSearchBar.<init>(MaterialSearchBar.java:126)
at java.lang.reflect.Constructor.newInstance(Native Method)
at android.view.LayoutInflater.createView(LayoutInflater.java:638)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:783)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:723)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:817)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:434)
at com.huaweisoft.ihserviceapp.fragment.BaseFragment.createView(BaseFragment.java:88)
at com.huaweisoft.ihserviceapp.fragment.BaseFragment.onCreateView(BaseFragment.java:62)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:66)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1241)
at android.app.Activity.performStart(Activity.java:6387)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2414)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
at android.app.ActivityThread.access$900(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5621)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
I am getting the exact same error- running on API 28, Pixel 2
And here is the location in the source where it occurs (EditTextStyleHelper.java:88)
field = editor.getClass().getDeclaredField("mCursorDrawable");
mCursorDrawable is not a field anymore-
So essentially the project will not work, since API updates regularly change private variables. Seems like it would be possible to create this library without relying on reflection of private variables.
I think we need modify some line codes on EditTextStyleHelper.
try { field = editor.getClass().getDeclaredField("mCursorDrawable"); field.setAccessible(true); field.set(editor, drawables); } catch (NoSuchFieldException e) { e.printStackTrace(); }
try { field = TextView.class.getDeclaredField(resFieldName); field.setAccessible(true); field = editor.getClass().getDeclaredField(drawableFieldName); field.setAccessible(true); field.set(editor, selectHandleDrawable); } catch (NoSuchFieldException e) { e.printStackTrace(); }
Since Android P, they are locking down on certain uses of reflection https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces
Editor
has a new field mDrawableForCursor
but we cannot access. Solution is use xml file as value of android:textCursorDrawable
Same problem occurs in this line of code:
field = TextView.class.getDeclaredField("mCursorDrawableRes");
still in MaterialSearchBar:0.8.2
Thank u