private boolean onCursorChanged ( final int index ) { Editable text = getText ( ) ; if ( text == null ) { return false ; } MentionSpan [ ] allSpans = text . getSpans ( 0 , text . length ( ) , MentionSpan . class ) ; for ( MentionSpan span : allSpans ) { // Deselect span if the cursor is not on the span. if ( span . isSelected ( ) && ( index < text . getSpanStart ( span ) || index > text . getSpanEnd ( span ) ) ) { span . setSelected ( false ) ; updateSpan ( span ) ; } } // Do not allow the user to set the cursor within a span. If the user tries to do so, select // move the cursor to the end of it. MentionSpan [ ] currentSpans = text . getSpans ( index , index , MentionSpan . class ) ; if ( currentSpans . length != 0 ) { MentionSpan span = currentSpans [ 0 ] ; int start = text . getSpanStart ( span ) ; int end = text . getSpanEnd ( span ) ; if ( index > start && index < end ) { super . setSelection ( end ) ; return true ; } } return false ; }
Method to handle the cursor changing positions . Returns true if handled false if it should be passed to the super method .