2010-12-02 7 views
2

Ich schreibe eine Anwendung, die GUI-Themen unterstützen soll. Es gibt kein Problem beim Anwenden und Konfigurieren, aber als Verständnisproblem ist das Thema für eine bestimmte Aktivität geändert worden.Auflösen, wenn Thema für die Aktivität geändert wird

Es gibt mehrere Aktivitäten, die Themen verwenden. Und es gibt noch eine andere, die PreferenceActivity erweitert und bietet die Funktionalität, ein Thema zu wählen. Die ID des ausgewählten Themas wird in der gemeinsamen Präferenz gespeichert. Wenn eine Aktivität, die Themen verwendet, onResume() aufgerufen wird, möchte ich überprüfen, ob die aktuelle Themen-ID gleich der ist, die in gemeinsamen Voreinstellungen gespeichert ist. Aber Theme Objekt hat keine ID oder Methode, um es zu identifizieren.

UPDATE: Jetzt überlege ich, einen String-Namen des aktuellen Themas in jeder Aktivität, aber diese Lösung sieht eher hässlich, weil ich die gleiche Variable zu jeder Aktivität in der Anwendung hinzufügen müsste.

Was ist die korrekte Art, diese Überprüfung durchzuführen? Mache ich etwas falsch?

Antwort

1

Ich habe Apps gesehen, die erfordern, dass Sie die App neu starten, damit Änderungen am Design wirksam werden. Ich denke nicht, dass das ein Problem ist. Auf diese Weise können Sie das Design einfach beim Start anwenden und sich nicht erneut darum kümmern.

0

Dies kann sein, was Sie wollen. Ich verwende ein Flag, so dass nach dem Festlegen des Designs in einer Einstellungsaktivität und dem Zurückkehren zu dieser aufrufenden Aktivität die aufrufende Aktivität neu gestartet und das Thema in SharedPreferences auf einen Wert gesetzt wird.

private boolean activityStarted = false; 

public void onCreate(Bundle savedInstanceState) { 
    Log.d(DEBUG_TAG, "onCreate()"); 
    activityStarted = true; 
    setTheme(); // user-defined method 

    super.onCreate(savedInstanceState); 
    ... 
} 


@Override 
protected void onResume() { 
    super.onResume(); 
    Log.d(DEBUG_TAG, "onResume()"); 

    if(activityStarted == true){ // it has come from onCreate() 
    activityStarted = false; // Set flag to false so that next time onResume() 
          // is called after resuming existing activity, 
          // the activity will be restarted and theme will 
          // be set 
    } else { // it has directly come to onResume() 
    finish(); 
    startActivity(getIntent()); 
    } 

} 

aktualisieren

Ich bin nicht sicher, ob dies ein besserer Weg, dies zu tun, sondern Logik in die onResume() Methode setzen, ich bin das Überschreiben der onActivityResult() Methode und dem Neustart der Activity, wenn die vorherige Activity war die Einstellungen Activity.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.settings) { 
     Intent settings_intent = new Intent(this, Settings.class); 
     startActivityForResult(settings_intent, SETTINGS); 
     return true; 
    } else { 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    // Identify our request code 
    switch (reqCode) { 
     case SETTINGS: 
      if (resultCode == RESULT_CANCELED) { 
       Log.d(DEBUG_TAG, "RESULT_CANCELED"); 
       finish(); 
       startActivity(getIntent()); 
      } else if (resultCode == RESULT_OK) { 
       Log.d(DEBUG_TAG, "RESULT_OK"); 
      } 

      break; 
    } 

} 
Verwandte Themen