I am trying to use ListPreference item in a Fragment.
I have the following Fragment:
public class PreferencesFragment extends PreferenceFragment
{
public PreferencesFragment() {
}
public static PreferencesFragment newInstance() {
PreferencesFragment fragment = new PreferencesFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
My preferences.xml looks as follows:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ListPreference
android:title="Test"
android:key="list_contacts"
android:defaultValue="0"
android:entries="@array/list_entries"
android:entryValues="@array/list_values"/>
</PreferenceScreen>
and my arrays.xml is like this:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="list_entries">
<item>Item1</item>
<item>Item2</item>
<item>Item3</item>
</string-array>
<string-array name="list_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
</resources>
I am attaching that PreferencesFragment into my MainActivity.
It shows up, but when I click on that item, the dialog with list of items doesn't show up.
Instead I am getting the following error output:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.android.internal.app.AlertController.setupView(AlertController.java:472)
at com.android.internal.app.AlertController.installContent(AlertController.java:237)
at android.app.AlertDialog.onCreate(AlertDialog.java:423)
at android.app.Dialog.dispatchOnCreate(Dialog.java:389)
at android.app.Dialog.show(Dialog.java:293)
at android.preference.DialogPreference.showDialog(DialogPreference.java:319)
at android.preference.DialogPreference.onClick(DialogPreference.java:277)
at android.preference.Preference.performClick(Preference.java:994)
at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:214)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1155)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3126)
at android.widget.AbsListView$3.run(AbsListView.java:4041)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
and the applications stops.
What am I doing incorectly? How can I fix it up?
I have already looked through all threads here, but nothing worked and nothing more comes to my mind.
EDIT: My fragments switching in Activity is quite complex, but all in all it is something like this:
private void navigatePreferences() {
preferencesFragment = PreferencesFragment.newInstance();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.mainFragmentPlace, preferencesFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}