2013-02-11 3 views
6

Приложение, которое я разрабатываю, имеет активность, которая расширяет SherlockFragmentActivity. Я хотел бы использовать настройки api, чтобы легко добавлять предпочтения к активности. Поскольку я хотел бы поддерживать уровень api 8 и выше, мне нужно расширить активность из класса SherlockPreferenceActivity.Android PreferenceActivity и диалоговые фрагменты

Проблема в том, что для работы необходимо отобразить диалог. Диалог расширяет SherlockDialogFragment. Метод диалога show() требует двух параметров: объекта FragmentManager и тега String.
Чтобы получить объект FragmentManager, я использовал метод getSupportFragmentManager(). Этот метод отсутствует в SherlockPreferenceActivity. Я пытался использовать getFragmentManager() но Eclipse, говорит, что

Метод шоу (FragmentManager, String) в типе DialogFragment является не применяется для аргументов (FragmentManager, String)

Как я могу показать Диалоговый фрагмент от SherlockPreferenceActivity?

+0

У меня та же проблема. Нам нужно получить FragmentManager из пакета поддержки, но в SherlockPreferenceActivity нет такой вещи. = ( –

+1

Я решил это по-другому. Создайте еще одно действие под тем же пакетом (не забудьте добавить это новое действие в манифест). Расширьте SherlockPreferenceActivity и реализуйте интерфейс SharedPreferences.OnSharedPreferenceChangeListener. Посмотрите на сайт разработчика Android, чтобы понять как это сделать. Используйте это действие для управления пользовательскими настройками. Из другого действия, когда пользователь нажимает кнопку настройки, запустите активность предпочтения с намерением. Из основного действия вы сможете прочитать настройки с помощью PreferenceManager. –

ответ

0

Вы должны использовать Shared Preferences, а не использовать PreferenceActivity. Объявляйте эти ссылки в отдельном вспомогательном классе, а не распространяйте его на Activity. Это дает вам гибкость в создании настраиваемого макета.

Пример:

public class SharePrefManager { 
    // Shared Preferences 
    SharedPreferences pref; 

    // Editor for Shared preferences 
    Editor editor; 

    // Context 
    Context _context; 

    // Shared pref mode 
    int PRIVATE_MODE = 0; 

    // Sharedpref file name 
    private static final String PREF_NAME = "selfhelppref"; 

    //Your configurable fields 
    public static final String KEY_PREF1 = "pref1"; 
    public static final String KEY_PREF2 = "pref2"; 
    public static final String KEY_PREF3 = "pref3"; 


    public SharePrefManager(Context context){ 
     this._context = context; 
     pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
     editor = pref.edit(); 
    } 

    //Setter function for configurable field 
    public void setPref(String key, String value){ 
     editor.putString(key, value); 
    } 

    //Getter function for configurable field 
    public String getPref(String key){ 
      return editor.getString(key); 
    } 
} 

Реферирование на вашей деятельности

SharePrefManager SM = new SharePrefManager(this); 
SM.setPref(SM.KEY_PREF1, "name"); 
String value = SM.getPref(SM.KEY_PREF1); 
0

Попробуйте использовать SherlockDialogFragment.getSherlockActivity().getSupportFragmentManager().

Пример: mySherlockDialogFragment.show(mySherlockDialogFragment.getSherlockActivity().getSupportFragmentManager(), "my_tag");

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