2013-03-02 10 views
9

My PreferenceActivity funziona alla grande tranne che per una cosa. L'icona ActionBar, che riporta perfettamente l'utente all'attività precedente in tutte le altre mie attività, non funziona in PreferenceActivity. Quando faccio clic sull'icona, lampeggia come se stesse per tornare all'attività precedente, ma PreferenceActivity rimane sullo schermo. È interessante notare che il pulsante Indietro restituisce l'utente all'attività precedente. C'è un modo per rendere l'icona Home di ActionBar "normalmente" in PreferenceActivity?L'icona Home della barra delle azioni di PreferenceActivity non ritorna a casa (a differenza di ET :)

Ecco il codice:

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Set actionBar controls for Settings 
    TextView actionBarTitle = (TextView) findViewById(Resources.getSystem().getIdentifier("action_bar_title", "id", "android")); 
    ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
    actionBar.setIcon(R.drawable.ic_launcher); 
    actionBar.setDisplayShowTitleEnabled(true); 
    actionBarTitle.setTextColor(Color.WHITE); 
    actionBarTitle.setTextSize(16); 
    actionBar.setTitle(R.string.settings_menu_title); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { //Build.VERSION_CODES.ICE_CREAM_SANDWICH 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setDisplayHomeAsUpEnabled(true); // show back arrow on title icon 
     actionBar.setDisplayShowHomeEnabled(true); 
    } 
...... Handle prefs (all working fine)..... 
    } 

}

////// E il codice chiamante ////////

//Use menu button to access settings screen 
    @Override 
    public boolean onKeyDown(int keycode, KeyEvent e) { 
     switch(keycode) { 
     case KeyEvent.KEYCODE_MENU: 
      Intent intent = new Intent(this, SettingsActivity.class); 
      startActivity(intent); 
      return true; 
     } 
     return super.onKeyDown(keycode, e); 
    } // [END onKeyDown (for menu click capture) ] 
+0

+1 se per nient'altro che furtivamente un riferimento ET in – Simon

+0

Come sarebbe getActionBar() lavoro nella vostra onCreate, se si sta estendendo da PreferenceActivity ?? –

risposta

12

Grazie a @Axarydax per avermi indicato nella giusta direzione. Mi sono reso conto che PreferenceActivity è diverso dalle mie altre attività poiché il pulsante Home torna a chiamando l'attività anziché MainActivity. Quindi la soluzione richiesta (1) usando startActivityForResult (invece di startActivity) per chiamare PreferenceActivity e (2) usando onOptionsItemSelected in PreferenceActivity per gestire il ritorno (per la risposta di @ Axarydax). Entrambi (1) e (2) sono mostrate sotto:

// (1) Menu button used to access PreferenceActivity 
@Override 
    public boolean onKeyDown(int keycode, KeyEvent e) { 
     switch(keycode) { 
     case KeyEvent.KEYCODE_MENU: 
      Intent intent = new Intent(this, SettingsActivity.class); 
      startActivityForResult(intent, 1); //enables return to here 
      return true; 
     } 
     return super.onKeyDown(keycode, e); 
    } 

// (2) Return to calling activity from PreferenceActivity 
    @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     int SUCCESS_RESULT=1; 
     setResult(SUCCESS_RESULT, new Intent()); 
     finish(); //return to caller 
     return true; 
    } 
    return false; 
} 
4

esclusione onOptionsItemSelected nella vostra Attività, verrà richiamata quando si fa clic sull'icona con il valore ID di android.R.id.menu

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     //do your code 
     return true; 
    } 
    return false; 
} 
Problemi correlati