2016-08-29 34 views
5

Utworzyłem ustawienia aplikacji z Preferencjami. Ale zauważyłem, że nie ma paska narzędzi w mojej PreferenceActivity. Jak mogę dodać pasek narzędzi do mojej PreferenceActivity?Jak dodać pasek narzędzi w PreferenceActivity

Mój kod:

mój pref_xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<ListPreference 
    android:key="select_class" 
    android:title="@string/select_class" 
    android:defaultValue="0" 
    android:entries="@array/classy" 
    android:entryValues="@array/classy" 
    android:dialogTitle="@string/select_class" /> 
</PreferenceScreen> 

mój PrefActivity.java:

package ***.***.***; 

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

public class PrefActivity extends PreferenceActivity { 
@Override 
protected void onCreate(final Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefFragment()).commit(); 
} 

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

PS Gautam, w kodzie .java wystąpi błąd w linii:

setSupportActionBar(toolbar); : 

    java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx/xxx.PrefActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5349) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 
                      Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. 
                      at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:198) 
                      at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:130) 
                      at com.smartfon_apps.timetable_sch32.PrefActivity.onCreate(PrefActivity.java:21) 
                      at android.app.Activity.performCreate(Activity.java:6020) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)  
                      at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:135)  
                      at android.app.ActivityThread.main(ActivityThread.java:5349)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:372)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)  
+0

stosowanie preferencji fragment z appcompatactivity i zawierać pasek w układzie aktywności –

+0

cant ustawić pasek w układzie aktywności? w jaki sposób? –

Odpowiedz

16

Użyj Aktywność rozszerzenie AppCompatActivity zawierający pasek narzędzi odwoływać od pliku układu jak poniżej

public class UserSettingPreference extends AppCompatActivity { 

Toolbar toolbar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.toolbar); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setTitle("Settings"); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

       onBackPressed(); 

     } 
    }); 
    getFragmentManager().beginTransaction().replace(R.id.fragment_container, 
      new UserPreferenceFragment()).commit(); 
} 

} 

Zdefiniuj układ zawierający pasek i framelayout do trzymaj fragment

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<Toolbar 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#80000000" 
    android:minHeight="?android:attr/actionBarSize" 
    app:contentInsetEnd="0dp" 
    app:contentInsetLeft="0dp" 
    app:contentInsetRight="0dp" 
    app:contentInsetStart="0dp"/> 


<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 
</LinearLayout> 

Następnie zdefiniować fragment rozszerzenie preferencji fragment jak poniżej -

public class UserPreferenceFragment extends PreferenceFragment 

Aby odwołać się do zmiany preferencji.xml naUtwórz fragment jak poniżej -

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.fragment_preference); 
} 

Aby odnieść poszczególne elementy wewnątrz preference.xml metody użycie getPreferenceScreen

switchPreference = (SwitchPreference) getPreferenceScreen().findPreference("floating_widget"); 
+0

'layout_below' nie jest wymagany w 'Linear Layout' –

+0

yes, już usunąłem go. Dzięki za wskazanie go – Gautam

+0

A gdzie jest mój pref.xml? –