2016-05-14 2 views
7

Вот мое предпочтение деятельность:добавить панель действий с задней кнопкой в ​​привилегированной деятельности

package com.example.hms.test; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class PrefsActivity extends PreferenceActivity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.prefs); 
    } 

} 

здесь я хочу показать ActionBar с настройками имен и кнопку возврата на главную

+0

Возможный дубликат [Создание Preference экрана с поддержкой (V21) Toolbar] (http://stackoverflow.com/questions/26564400/creating-a-preference-screen-with- поддержка-v 21-панель инструментов) – Shubhank

+0

try http://stackoverflow.com/a/27455363/3981656 –

+0

Также проверьте это [Добавить ActionBar в PreferenceActivity] (http://stackoverflow.com/questions/30793609/add-actionbar-to-a -preferenceactivity) – jayeshsolanki93

ответ

15

Вы должны сделать пару вещи:

  1. Добавьте следующие строки в OnCreate из PreferenceActivity:

    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    
  2. Override onOptionsItemSelected в PreferenceActivity:

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) 
        { 
         case android.R.id.home: 
          NavUtils.navigateUpFromSameTask(this); 
          return true; 
        } 
        return super.onOptionsItemSelected(item); 
    } 
    
  3. Изменение <activity> тег манифеста для вашего PreferenceActivity выглядеть примерно так:

    <activity 
        android:name=".PrefsActivity" 
        android:label="@string/title_activity_settings" 
        android:parentActivityName=".MainActivity"> 
        <meta-data 
        android:name="android.support.PARENT_ACTIVITY" 
        android:value="com.example.android.MainActivity" /> 
    </activity> 
    
  4. Наконец положить андроида: launchMode = "SingleTop" в вашем MainActivity <activity> тег в манифесте:

    <activity 
        android:name=".MainActivity" 
        android:label="@string/app_name" 
        android:launchMode="singleTop" 
        android:theme="@style/AppTheme.NoActionBar"> 
        <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
    
        <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    
+0

Но PreferenceActivity не расширяет AbbCombatActivity !! –

+0

Извините, getSupportActionBar() не найден, когда мой класс расширяет PreferenceActivity – Denny

7

Ответ, полученный Pooya, не будет работать для PreferenceActivity. Вместо этого сделайте свой класс расширением AppCompatActivity и используйте PreferenceFragment, чтобы загрузить предпочтение. Вот мой код для настройки:

public class MyPrefsActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); 

     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    } 

    @Override 
    public boolean onSupportNavigateUp(){ 
     finish(); 
     return true; 
    } 

    public static class MyPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 
     } 
    } 
} 

Помещенной активность в вашем AndroidManifest.xml:

<activity android:name=".MyPrefsActivity" 
    android:label="Preferences" 
    android:theme="@style/AppTheme"/> 

И теперь вы можете начать деятельность настройки, используя намерение в моей основной деятельности (или в зависимости от того активности родителя у вас есть), как обычно:

Intent prefsIntent = new Intent(activity, MyPrefsActivity.class); 
activity.startActivity(prefsIntent); 
+0

Этот подход будет ** не работать ** в случае, если какая-либо тема 'NoActionBar' применяется к' MyPrefsActivity', поэтому вызов getSupportActionBar() будет возвращен ноль. – Eido95

Смежные вопросы