-
Notifications
You must be signed in to change notification settings - Fork 56
Description
my app fore close when i use search dialog error occured on SearchableSpinnerDialog with following logcat
FATAL EXCEPTION: main (Ask Gemini)
Process: com.ayokulakan.dev, PID: 6665
java.lang.IndexOutOfBoundsException: setSpan (-1 ... 1) starts before 0
at android.text.SpannableStringInternal.checkRange(SpannableStringInternal.java:499)
at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:199)
at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:186)
at android.text.SpannableString.setSpan(SpannableString.java:60)
at com.chivorn.smartmaterialspinner.SearchableSpinnerDialog$1.getView(SearchableSpinnerDialog.java:222)
at android.widget.AbsListView.obtainView(AbsListView.java:2638)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1417)
at android.widget.ListView.onMeasure(ListView.java:1323)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1204)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:723)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26114)
at com.android.internal.widget.AlertDialogLayout.tryOnMeasure(AlertDialogLayout.java:146)
at com.android.internal.widget.AlertDialogLayout.onMeasure(AlertDialogLayout.java:71)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26114)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7115)
at com.android.internal.policy.DecorView.measureChildWithMargins(DecorView.java:3428)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:958)
at android.view.View.measure(View.java:26114)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3972)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2644)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2992)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2383)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9307)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1186)
at android.view.Choreographer.doCallbacks(Choreographer.java:986)
at android.view.Choreographer.doFrame(Choreographer.java:912)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1171)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:334)
at android.app.ActivityThread.main(ActivityThread.java:8396)
2025-05-16 08:27:56.584 6665-6665 AndroidRuntime com.ayokulakan.dev E at java.lang.reflect.Method.invoke(Native Method) (Ask Gemini)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
fixed for object :
if (SearchableSpinnerDialog.this.searchListItemColor != 0) {
SearchableSpinnerDialog.this.tvListItem.setTextColor(SearchableSpinnerDialog.this.searchListItemColor);
if (SearchableSpinnerDialog.this.searchFilterColor != 0 && SearchableSpinnerDialog.this.searchView.getQuery() != null && !SearchableSpinnerDialog.this.searchView.getQuery().toString().isEmpty()) {
String query = StringUtils.removeDiacriticalMarks(SearchableSpinnerDialog.this.searchView.getQuery().toString()).toLowerCase(Locale.getDefault());
String fullText = StringUtils.removeDiacriticalMarks(SearchableSpinnerDialog.this.tvListItem.getText().toString()).toLowerCase(Locale.getDefault());
int start = fullText.indexOf(query);
int end = start + query.length();
spannableString.setSpan(new ForegroundColorSpan(SearchableSpinnerDialog.this.searchFilterColor), start, end, 0);
SearchableSpinnerDialog.this.tvListItem.setText(spannableString, BufferType.SPANNABLE);
}
}
use this on your code fixes :
int start = fullText.indexOf(query);
if (start >= 0) {
int end = start + query.length();
if (end <= spannableString.length()) {
spannableString.setSpan(new ForegroundColorSpan(SearchableSpinnerDialog.this.searchFilterColor), start, end, 0);
}
}
SearchableSpinnerDialog.this.tvListItem.setText(spannableString, BufferType.SPANNABLE);