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()
が依然として呼び出されていると判断しましたが、色には影響していないようです。どうしてこれなの?
既に存在する 'ForegroundColorSpans'を保持したいのですが? –
レイアウトの設定変更を処理していますか? – nckbrz