Android Settings Tutorial using PreferenceFragment
First add dependencies in build.gradle
compile 'com.android.support:preference-v7:25.3.1'
Create xml directory under res folder under xml folder. create xml folder name is preferences.
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:defaultValue="true"
android:key="updateNotification"
android:summary="Remind you to update"
android:title="Update"
/>
<ListPreference
android:defaultValue="1"
android:entries="@array/listArray"
android:entryValues="@array/listValueforSharedPreference"
android:key="languageListSetting"
android:summary="Select any language"
android:title="Language"
/>
</PreferenceScreen>
Create a new layout file under value folder. array.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="listArray">
<item>English</item>
<item>Hindi</item>
</string-array>
<string-array name="listValueforSharedPreference">
<item>1</item>
<item>2</item>
</string-array>
</resources>
Create a new Class and extends with PreferenceFragment and imlements OnSharedPreferenceChangeListener
package com.mahesh.androidissimples.setting;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.widget.Toast;
/**
* A simple {@link Fragment} subclass.
*/
public class SettingFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{
public static final String KEY_LANGUAGE="languageListSetting";
public static final String KEY_SETTINGS_MENU="updateNotification";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("SettingPrf");
getPreferenceManager().setSharedPreferencesMode(Context.MODE_PRIVATE);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(KEY_LANGUAGE)){
Toast.makeText(getActivity(), "Changed Language", Toast.LENGTH_SHORT).show();
}
if (key.equals(KEY_SETTINGS_MENU)){
Toast.makeText(getActivity(), "Changed Settings menu", Toast.LENGTH_SHORT).show();
}
}
}
In MainActivity class
package com.mahesh.androidissimples.setting;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFragmentManager().beginTransaction().replace(android.R.id.content,new SettingFragment())
.commit();
}
}
Output:

No comments:
Post a Comment