룬아님의 취중코딩

PreferenceFragment에서 PreferenceFragmentCompat으로 변경하기 본문

개발/안드로이드 개발

PreferenceFragment에서 PreferenceFragmentCompat으로 변경하기

룬아님 2019. 10. 2. 18:55

AndroidX로 migrate 이후 PreferenceFragment 에서 PreferenceFragmentCompat으로 변경이 됬습니다.
변경 이후 처리한 이슈에 대해 정리해 보겠습니다.

 

1. onCreatePreferences

PreferenceFragmentCompat으로 변경 이후 반드시 onCreatePreferences를 override하도록 변경 되었습니다.
기존의 onCreate에서 사용하던 로직을 onCreatePreferences에서 구현해주시면 됩니다.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences_message);
    messageEnablePref = (SwitchPreference)findPreference("pref_key_message_send_and_receive");
}

==> 기존 코드
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.preferences_message, rootKey);
    messageEnablePref = findPreference("pref_key_message_send_and_receive");
}

==> 고친 코드

addPreferencesFromResource이 setPreferencesFromResource으로 바뀐 것을 제외하고 큰 변화가 없습니다.

 

2.getEditor()

Preference객체에서 editor를 가져오는 방법이 바뀌었습니다.
기존의 getEditor()로 가져오던 것을 getSharedPreferences().edit()으로 가져올 수 있습니다.

messageEnablePref.getEditor().putBoolean("key", isMessageOn).apply();
messageEnablePref.getSharedPreferences().edit().putBoolean("key", isMessageOn).apply();

 

3. getSupportFragmentManager

기존에는 getFragmentManager을 사용하여 fragment를 add 해주었습니다. 하지만 PreferenceFragmentCompat을 상속받은 fragment를 add해주기 위해서는 getSupportFragmentManager를 사용해야 합니다.

getFragmentManager().beginTransaction()
         .replace(R.id.content, new MessageSettingsFragment())
         .commit();

==> 기존코드
getSupportFragmentManager().beginTransaction()
         .replace(R.id.content, new MessageSettingsFragment())
         .commit();

==> 고친 코드

 

4. xml의 변화

AndroidX로 migrate 이후 칸에 들여쓰기가 적용되어 있고 이전에는 칸마다 적용되어 있던 line이 사라져있었습니다.
Theme 등으로 적용을 해보려 해도 잘 적용되지 않아 xml에 직접 추가하는 방법을 찾아 이전 UI와 맞춰주는 작업을 했습니다.

<SwitchPreference android:key="key" android:title="@string/id" android:defaultValue="true" android:dependency="key" app:iconSpaceReserved="false" app:allowDividerAbove = "true"/>
app:iconSpaceReserved="false"
==> 들여쓰기 제거
app:allowDividerAbove = "true"
==> 위쪽에 줄 추가

app:allowDividerBelow = "true"
==> 아래쪽에 줄 추가
반응형
Comments