ActionBar setBackgroundDrawable () löscht den Hintergrund von Thread / Handler
Ich versuche, den Hintergrund der ActionBar von einem Handler aus zu ändern. Das Endziel ist, den Handler an eine AsyncTask zu übergeben, aber im Moment führt sogar das Aufrufen von Handler.sendMessage () aus einem Thread zu einem seltsamen Verhalten. Durch den Debugger kann ich sehen, dass der Handler die Nachricht empfängt und anschließend setActionBarBackground () bis zum Ende ausführt.
Die Standard-ActionBar mit blauem Grundstrich verschwindet vollständig vom Bildschirm und wird nicht durch das neue GradientDrawable ersetzt. Ich vermute, dass der Hintergrund irgendwie zunichte gemacht wird. Wenn ich mich wieder auf den EditText konzentriere, wird außerdem der richtige Hintergrund für die GradientDrawable-Aktionsleiste angezeigt. Das Verhalten, das ich erwarten würde, ist für den Hintergrund eine einfache Änderung bei actionDone.
Jeder Einblick, warum dies geschieht, wäre sehr dankbar!
Relevanter Code:
TestActivity.java
public class TestActivity extends RoboSherlockFragmentActivity {
@InjectView(R.id.ET_test) EditText testET;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(MainApp.TAG, "onCreate");
setContentView(R.layout.test_activity);
testET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if (i == EditorInfo.IME_ACTION_DONE) {
String loc = testET.getText().toString();
InputMethodManager mgr = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(testET.getWindowToken(), 0);
Toast.makeText(TestActivity.this, "EditText done!", Toast.LENGTH_SHORT).show();
/*TestQuery tq = new TestQuery(TestActivity.this, mHandler);
tq.execute();*/
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.sendMessage(new Message());
}
}).start();
}
return true;
}
});
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//setActivityColors();
setActionBarBackground();
}
};
private void setActionBarBackground() {
ActionBar ab = getSupportActionBar();
//Drawable d = WidgetUtils.getActionBarDrawable(TestActivity.this, 0xFF00FFFF);
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[]{0xFFFFFFFF, 0xFF000000});
gd.setCornerRadius(0f);
ab.setBackgroundDrawable(gd);
}
}
test_activity.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button"/>
<EditText
android:id="@+id/ET_test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:maxLines="1"
android:lines="1"
android:inputType="number"
android:imeOptions="actionDone"
android:nextFocusUp="@id/ET_test"
android:nextFocusLeft="@id/ET_test"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button2"/>
</LinearLayout>