7

Ho un SettingsActivity che estende PreferenceActivity per mostrare le impostazioni nella mia app.setDisplayHomeAsUpEnabled() non funziona in PreferenceActivity

C'è una freccia indietro, ma non funziona.

Ecco il codice SettingsActivity.java del file:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{ 

    private AppCompatDelegate mDelegate; 

    public static final String RESET_PASSWORD_KEY = "reset_password"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     getDelegate().installViewFactory(); 
     getDelegate().onCreate(savedInstanceState); 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 

     SharedPreferences sharedPreferencesCompat = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     Preference myPref = (Preference) findPreference(RESET_PASSWORD_KEY); 
     myPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      public boolean onPreferenceClick(Preference preference) { 
       //open browser or intent here 
       Intent resetPasswordActivityIntent = new Intent(SettingsActivity.this, ResetPasswordActivity.class); 
       startActivity(resetPasswordActivityIntent); 
       return true; 
      } 
     }); 

    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     getDelegate().onPostCreate(savedInstanceState); 
    } 

    public ActionBar getSupportActionBar() { 
     return getDelegate().getSupportActionBar(); 
    } 

    public void setSupportActionBar(@Nullable Toolbar toolbar) { 
     getDelegate().setSupportActionBar(toolbar); 
     getDelegate().getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public MenuInflater getMenuInflater() { 
     return getDelegate().getMenuInflater(); 
    } 

    @Override 
    public void setContentView(@LayoutRes int layoutResID) { 
     getDelegate().setContentView(layoutResID); 
    } 

    @Override 
    public void setContentView(View view) { 
     getDelegate().setContentView(view); 
    } 

    @Override 
    public void setContentView(View view, ViewGroup.LayoutParams params) { 
     getDelegate().setContentView(view, params); 
    } 

    @Override 
    public void addContentView(View view, ViewGroup.LayoutParams params) { 
     getDelegate().addContentView(view, params); 
    } 

    @Override 
    protected void onPostResume() { 
     super.onPostResume(); 
     getDelegate().onPostResume(); 
    } 

    @Override 
    protected void onTitleChanged(CharSequence title, int color) { 
     super.onTitleChanged(title, color); 
     getDelegate().setTitle(title); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     getDelegate().onConfigurationChanged(newConfig); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     getDelegate().onStop(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     getDelegate().onDestroy(); 
    } 

    public void invalidateOptionsMenu() { 
     getDelegate().invalidateOptionsMenu(); 
    } 

    private AppCompatDelegate getDelegate() { 
     if (mDelegate == null) { 
      mDelegate = AppCompatDelegate.create(this, null); 
     } 
     return mDelegate; 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if (key.equals(RESET_PASSWORD_KEY)) { 

     } 
    } 
} 

Ecco il codice preferences.xml del file:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <Preference 
     android:title="xxx" 
     android:summary="xxxxxx" 
     android:key="reset_password" /> 
</PreferenceScreen> 

ecco come 'SettingsActivity' è definito in AndroidManifest.xml:

<activity 
    android:name=".SettingsActivity" 
    android:label="@string/title_activity_settings" 
    android:parentActivityName=".MainActivity"> 
</activity> 

Come posso fare che freccia operativa?

Per favore fatemi sapere.

Siamo spiacenti, se il formato della domanda sembra inappropriato. Sono ancora un principiante.

+0

dov'è la barra degli strumenti? – notsopopularguy

risposta

22

È necessario chiamare il metodo privato setSupportActionBar() all'interno onCreate().

Inoltre, si potrebbe desiderare di implementare onOptionsItemSelected:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     onBackPressed(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Bello, grazie per quello – Sapher

2

ti sei dimenticato di chiamare questo metodo nella onCreate()

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
+0

grazie, ma questo non ha aiutato! –

2

Ho fatto alcune ipotesi su quello che potrebbe essere cercando di ottenere. Questo dovrebbe funzionare se si desidera utilizzare una barra degli strumenti personalizzata con PreferenceActivity. Il seguente codice va all'interno di onPostCreateView()

LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent(); 
mToolBar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.toolbar, root,false); 
mToolBar.setTitle(R.string.title); 
// insert at top 
root.addView(mToolBar, 0); 

setSupportActionBar(mToolBar); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setDisplayShowHomeEnabled(true); 
+0

dove dovrei aggiungere questo? –

+0

@HammadNasir ha aggiornato la risposta – notsopopularguy