2016-04-20 2 views
1

Я создал экран настроек, расширив PreferencesActivity в соответствии с примером here.Android PreferencesActivity, показывающий предыдущий фрагмент

Первый экран выглядит нормально, но когда я нажимаю, чтобы увидеть второй экран, я вижу их один поверх другого. Итак, принимая советы от ряда других потоков, я изменил фон второго фрагмента на черный.

Это работало настолько, насколько я больше не вижу их обоих. Но вместо этого я вижу FIRST только за исключением заголовка.

Первый экран выглядит следующим образом:

enter image description here

, а второй выглядит следующим образом:

enter image description here

только строка заголовка изменился, тогда как остальные остались прежними.

Это код в моей деятельности:

public class SettingsActivity extends PreferenceActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Load the preferences from an XML resource 
    getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesMain()).commit(); 


} 

/** 
* This fragment contains a second-level set of preference that you 
* can get to by tapping an item in the first preferences fragment. 
*/ 
public static class PreferencesMain extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     View view = getView(); 
     view.setBackgroundColor(ResourcesCompat.getColor(getResources(),android.R.color.black, null)); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     view.setBackgroundColor(ResourcesCompat.getColor(getResources(),android.R.color.black, null)); 
    } 
} 

/** 
* This fragment contains a second-level set of preference that you 
* can get to by tapping an item in the first preferences fragment. 
*/ 
public static class PreferencesNotifications extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences_notifications); 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     View view = getView(); 
     view.setBackgroundColor(ResourcesCompat.getColor(getResources(),android.R.color.black, null)); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     view.setBackgroundColor(ResourcesCompat.getColor(getResources(),android.R.color.black, null)); 
    } 
} 

@Override 
protected boolean isValidFragment (String fragmentName) { 
    return true; 
} 

} 

preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory 
    android:title="@string/settings_notifications"> 

    <!-- This PreferenceScreen tag sends the user to a new fragment of 
     preferences. If running in a large screen, they can be embedded 
     inside of the overall preferences UI. --> 
    <PreferenceScreen 
     android:fragment="activities.SettingsActivity$PreferencesNotifications" 
     android:title="@string/settings_notifications_managePushTitle" 
     android:summary="@string/settings_notifications_managePushSummary"> 
     android:background="@android:color/black" 
     <!-- Arbitrary key/value pairs can be included for fragment arguments --> 
     <extra android:name="someKey" android:value="somePrefValue" /> 
    </PreferenceScreen> 

</PreferenceCategory> 

preferences_notifications.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<PreferenceCategory 
    android:title="@string/settings_notifications_managePushHeader"> 

<CheckBoxPreference 
    android:key="checkbox_preference" 
    android:title="@string/settings_notifications_managePushEntry1Title" 
    android:summary="@string/settings_notifications_managePushEntry1Summary" /> 
</PreferenceCategory> 

ответ

1

Добавить header.xml для управления настройками и использовать метод onBuildHeaders.

Ресурс headers.xml:

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> 
    <header android:title="Digle" 
     android:fragment="activities.SettingsActivity$PreferencesMain"/> 
</preference-headers> 

Класс SettingsActivity:

public class SettingsActivity extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Remove all code in here 
    } 

    @Override 
    public void onBuildHeaders(List<Header> target) { 
     super.onBuildHeaders(target); 
     loadHeadersFromResource(R.xml.headers, target); 
    } 

    ... 
} 

РЕДАКТИРОВАТЬ: Альтернативой может быть использование subscreens. Вы должны разместить группу объектов Preference внутри PreferenceScreen.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
        android:key="Settings" 
        android:title="@string/app_name"> 
    <PreferenceCategory 
     android:title="@string/settings_notifications"> 

     <PreferenceScreen 
      android:background="@android:color/black" 
      android:summary="@string/settings_notifications_managePushSummary" 
      android:title="@string/settings_notifications_managePushTitle"> 

      <PreferenceCategory 
       android:title="@string/settings_notifications_managePushHeader"> 

       <CheckBoxPreference 
        android:key="checkbox_preference" 
        android:summary="@string/settings_notifications_managePushEntry1Summary" 
        android:title="@string/settings_notifications_managePushEntry1Title"/> 

      </PreferenceCategory> 

     </PreferenceScreen> 

    </PreferenceCategory> 

</PreferenceScreen> 
+0

Проблема в том, что мои предпочтения - это не только заголовки. У меня есть некоторые «обычные» предпочтения, смешанные в. – theblitz

+0

Затем вы можете попробовать «подэкраны». –

+0

Разве это не то, что я делаю? Может быть, мне что-то не хватает (на самом деле я почти что чего-то не хватает). – theblitz

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