I want to add a couple buttons to the bottom of my preferences screen for setting defaults and restoring defaults. This answer doesn't cover how to do this using PreferenceFragment. What is the recommended way to accomplish this.
Activity that loads the preferences fragment:
public class SettingsActivity extends Activity {
@Override
public void onCreate( Bundle savedInstanceState) {
super.onCreate( savedInstanceState);
// load up the preferences fragment
getFragmentManager().beginTransaction().replace( android.R.id.content, new PrefsSettingsFragment()).commit();
}
}
PreferenceFragment implementation:
public class PrefsSettingsFragment extends PreferenceFragment {
@Override
public void onCreate( Bundle savedInstanceState) {
super.onCreate( savedInstanceState);
addPreferencesFromResource( R.xml.preferences);
}
}
preferences.xml:
<?xml version="1.0"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:key="edit_text_preference_server_address" android:title="@string/preference_server_address"/>
<SwitchPreference android:key="switch_preference_bat" android:title="@string/preference_bat"/>
<SwitchPreference android:key="switch_preference_comm" android:title="@string/preference_comm"/>
<SwitchPreference android:key="switch_preference_dev_mode" android:title="@string/preference_dev_mode" android:defaultValue="true"/>
</PreferenceScreen>
I meet the same question, and I found a way to handle this issue.
Overwrite the method onCreateView in PreferenceFragment, using the given the LayoutInfalter by parameters to create your own View, and return this view.
It's my code. I hope this can be helpful
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.set_alarm, null);
Button save = (Button)v.findViewById(R.id.save);
Button revert = (Button)v.findViewById(R.id.revert);
Button delete = (Button)v.findViewById(R.id.delete);
save.setOnClickListener(this);
revert.setOnClickListener(this);
delete.setOnClickListener(this);
if(mId == -1){
delete.setEnabled(false);
}
return v;
}