Как я могу выбрать заголовок по умолчанию в моей PreferenceActivity на планшетах? - PullRequest
5 голосов
/ 19 января 2012

Я работаю с PreferenceActivity, который будет полностью совместим с планшетами .

Для этого я буду работать согласно рекомендациям Google на этой странице .

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

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

Например, у меня есть несколько заголовков;

  • Общие настройки
  • Настройки интерфейса
  • Сетевые настройки

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

Есть ли способ достичь этого?

Ответы [ 3 ]

12 голосов
/ 12 апреля 2012

При создании Намерения для вызова PreferenceActivity вы можете добавить дополнительную строку «EXTRA_SHOW_FRAGMENT», чтобы указать, какой фрагмент должен первоначально отображаться. Вы передаете имя фрагмента, который хотите выбрать.

Например, если вы хотите выбрать заголовок общих настроек (и его содержимое), вы можете использовать следующий код:

final Intent intent = new Intent(this, ExtendedPreferenceActivity.class); // Assume we call it from an other activty
intent.putExtra(EXTRA_SHOW_FRAGMENT, GeneralSettingsFragment.class.getName());
startActivity(intent);

Более подробную информацию об этом можно найти здесь: http://developer.android.com/reference/android/preference/PreferenceActivity.html

В отчете о проблемах в Google сообщается, что для Android версии 3.0 правильный заголовок также не будет выбран автоматически. Отчет о проблеме и способ ее обхода см. Здесь: отчет о проблеме .

0 голосов
/ 26 апреля 2012

Вы можете использовать фрагмент по умолчанию:

Вот что я сделал:

public class PreferencesActivity extends SherlockPreferenceActivity {

/** Variables **/


/** Constants **/
private static final String CLASSTAG = PreferencesActivity.class.getSimpleName();


/** Class Methods **/
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.v(CLASSTAG, "onCreate");
    super.onCreate(savedInstanceState);
    initializeUI();
}

@Override
public Intent getIntent() {
    Log.v(CLASSTAG, "getIntent");
    final Intent modIntent = new Intent(super.getIntent());
    modIntent.putExtra(EXTRA_SHOW_FRAGMENT, SettingsFragment.class.getName());
    modIntent.putExtra(EXTRA_NO_HEADERS, true);
    return modIntent;
}


/** Private Functions **/
private void initializeUI() {
    getSupportActionBar().hide();
}


/** Classes **/
public static class SettingsFragment extends PreferenceFragment {

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

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

    private void initializeUI() { }
}


}

и XML по умолчанию (как в предыдущих версиях HoneyComb ...):

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

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

        <com.taptime.ui.preferences.ClickPreference
            android:key="@string/preferences_conditions_key"
            android:title="@string/preferences_conditions_title"/>

    </PreferenceCategory> 

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

        <com.newin.android.ui.widget.ClickPreference
            android:key="@string/preferences_logout_key"
            android:title="@string/preferences_logout_title"
            android:summary="@string/preferences_logout_summary"/>

    </PreferenceCategory> 

</PreferenceScreen>
0 голосов
/ 19 января 2012

Вы можете создавать PreferenceHeaders динамически, используя PreferenceActivity.Header class http://developer.android.com/reference/android/preference/PreferenceActivity.Header.html

...