0

最近痛いバグに遭遇し、最終的に最小限のレプロを手に入れました。ここでは、次のとおりです。デバイスが回転しているときにsetSpan()がSpannableStringBuilderに影響を与えないのはなぜですか?

private EditText mEditText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // This check ensures the code below is not run when onCreate() is called 
    // due to a change in screen orientation. 
    // See https://stackoverflow.com/a/11811999/4077294 
    if (savedInstanceState == null) { 
     // In the layout: main_editText has is an EditText with its text set to "Hello world!" 
     mEditText = (EditText) findViewById(R.id.main_editText); 
     workLoop(0); 
    } 
} 

private void workLoop(final int index) { 
    Editable text = mEditText.getText(); 
    if (index == text.length()) { 
     return; 
    } 

    text.setSpan(new ForegroundColorSpan(Color.BLUE), index, index + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
    Handler uiThreadHandler = new Handler(Looper.getMainLooper()); 
    uiThreadHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      workLoop(index + 1); 
     } 
    }, 5000); 
} 

あなたはこのコードを実行すると、ポートレートモードでデバイスを維持する場合、それは5秒間隔でHello world!青の各文字を色付けします。

このコードを実行して横向きモードに変更すると、青色の文字が突然停止します。私はデバッガを介してsetSpan()が依然として呼び出されていると判断しましたが、色には影響していないようです。どうしてこれなの?

答えて

0

spannable文字列を解放するには、text.clearSpans()に電話する必要があると思います。

+0

既に存在する 'ForegroundColorSpans'を保持したいのですが? –

+0

レイアウトの設定変更を処理していますか? – nckbrz

関連する問題