Fatal Exception: строка не может быть отброшена в Spannable

Мое приложение работает очень сильно, за исключением нескольких устройств. На одном из таких устройств я получаю FATAL EXCEPTION в одном из моих действий. Ошибка java.lang.ClassCastException: java.lang.String не может быть отброшена в android.text.Spannable … … в android.widget.TextView.setEnabled (TextView.java:1432)

ТРАССИРОВКИ СТЕКА

05-02 09:18:19.917: E/AndroidRuntime(20587): FATAL EXCEPTION: main 05-02 09:18:19.917: E/AndroidRuntime(20587): java.lang.ClassCastException: java.lang.String cannot be cast to android.text.Spannable 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.widget.TextView.setEnabled(TextView.java:1432) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.myapp.android.menu.LoginFragment.checkIfAnyFieldIsEmpty(LoginFragment.java:512) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.myapp.android.menu.LoginFragment.onCreateView(LoginFragment.java:183) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.os.Handler.handleCallback(Handler.java:615) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.os.Handler.dispatchMessage(Handler.java:92) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.os.Looper.loop(Looper.java:137) 05-02 09:18:19.917: E/AndroidRuntime(20587): at android.app.ActivityThread.main(ActivityThread.java:4962) 05-02 09:18:19.917: E/AndroidRuntime(20587): at java.lang.reflect.Method.invokeNative(Native Method) 05-02 09:18:19.917: E/AndroidRuntime(20587): at java.lang.reflect.Method.invoke(Method.java:511) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 05-02 09:18:19.917: E/AndroidRuntime(20587): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 05-02 09:18:19.917: E/AndroidRuntime(20587): at dalvik.system.NativeStart.main(Native Method) 

Вот фрагменты кода, окружающего ошибку.

XML LAYOUT CODE

 <com.myapp.android.view.StyledButton android:id="@+id/login_sign_in" style="@style/button_blue" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/state_list_login" android:textColor="@color/white" android:imeOptions="actionDone" android:padding="10dp" android:text="@string/sign_in" /> 

КЛАВИАТУРА CUSTOM BUTTON JAVA

 public class StyledButton extends Button { //variables private final String BOLD = "fonts/arial.ttf"; private final String NORMAL = "fonts/arial_bold.ttf"; private String mCustomFont = null; /** * Constructor * @param context */ public StyledButton(Context context) { super(context); } /** * Constructor * @param context * @param attrs */ public StyledButton(Context context, AttributeSet attrs) { super(context, attrs); setCustomAttributes(attrs); } /** * Set custom attributes * @param attrs */ private void setCustomAttributes(AttributeSet attrs) { TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.StyledTextView); mCustomFont = a.getString(R.styleable.StyledTextView_fontAsset); if(mCustomFont != null) { if(!isInEditMode()) { CustomFontManager fontManager = CustomFontManager.getInstance(); super.setTypeface(fontManager.getFont(getContext().getAssets(), mCustomFont)); } } a.recycle(); } /** * Set type face */ public void setTypeface(Typeface tf, int style) { CustomFontManager fontManager = CustomFontManager.getInstance(); if(isInEditMode()) { super.setTypeface(tf,style); return; } if(mCustomFont!=null) { super.setTypeface(fontManager.getFont(getContext().getAssets(), mCustomFont)); return; } switch (style) { case Typeface.NORMAL: super.setTypeface(fontManager.getFont(getContext().getAssets(), NORMAL)); break; case Typeface.BOLD: super.setTypeface(fontManager.getFont(getContext().getAssets(), BOLD)); break; default: super.setTypeface(fontManager.getFont(getContext().getAssets(), NORMAL)); break; } } 

}

ОШИБКА КОДА JAVA CODE

  private StyledButton mSignIn; public void checkIfAnyFieldIsEmpty() { if (mEmailEmpty || mPasswordEmpty) { mSignIn.setEnabled(false); } else { mSignIn.setEnabled(true); } } 

Ошибка кода mSignIn.setEnabled (false) вызывает ошибку. Если я прокомментирую это или просто заменил его так, чтобы и if, и else читали mSignIn.setEnabled (true), приложение работает нормально.

Еще раз. Код как работает отлично на большинстве устройств.

Solutions Collecting From Web of "Fatal Exception: строка не может быть отброшена в Spannable"

Вы сделали свою кнопку стиля незаменимой? Например, TextView должен выглядеть следующим образом:

TextView.setText («Hai», TextView.BufferType.SPANNABLE);

Это может быть но поздно, но … убедитесь, что текст в TextView, который вы пытаетесь задать, не задан как "" . По какой-то причине пустые строки не являются spannable.

Похоже, я вызывал android: imeOptions = "actionDone" в файле макета xml. Я удалил это, и он больше не разбился.

Зачем?