7

У меня есть SettingsActivity, который расширяет PreferenceActivity, чтобы показать настройки в моем приложении.setDisplayHomeAsUpEnabled() не работает в PreferenceActivity

Существует стрелка назад, но она не работает.

Вот код SettingsActivity.java файла:

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)) { 

     } 
    } 
} 

Вот код preferences.xml файла:

<?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> 

Вот как 'SettingsActivity' определяется в AndroidManifest.xml:

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

Как я могу сделать это стрелка операционная?

Пожалуйста, дайте мне знать.

Извините, если формат вопроса кажется неуместным. Я все еще новичок.

+0

где ваша панель инструментов? – notsopopularguy

ответ

22

Вы должны вызвать ваш частный метод setSupportActionBar() внутри onCreate().

Кроме того, вы можете реализовать onOptionsItemSelected:

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

Ничего, спасибо за это – Sapher

2

Вы забыли вызвать этот метод в вашем onCreate()

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
+0

спасибо, но это не помогло! –

2

Я сделал несколько предположений о том, что вы, возможно, пытаетесь достичь. Это должно работать, если вы хотите использовать специальную панель инструментов с PreferenceActivity. Следующий код входит внутрь 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

где я должен это добавить? –

+0

@ Хаммад Насир обновил ответ – notsopopularguy