Agregar botones a PreferenceFragment

Quiero añadir un par de botones a la parte inferior de mi pantalla de preferencias para establecer los valores predeterminados y restaurar los valores predeterminados. Esta respuesta no cubre cómo hacer esto usando PreferenceFragment. ¿Cuál es la manera recomendada de lograr esto.

Actividad que carga el fragmento de preferencias:

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(); } } 

Implementación de PreferenceFragment:

 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> 

Concuerdo con la misma pregunta, y encontré una manera de manejar este problema.

Sobrescriba el método onCreateView en PreferenceFragment, usando el dado LayoutInfalter por parámetros para crear su propia vista y devolver esta vista.

Es mi código. Espero que esto pueda ser útil

 @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; } 

He modificado el post anterior un poco, para que el botón se adjuntará en la parte inferior de la vista.

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LinearLayout v = (LinearLayout) super.onCreateView(inflater, container, savedInstanceState); Button btn = new Button(getActivity().getApplicationContext()); btn.setText("Button on Bottom"); v.addView(btn); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { } }); return v; } 

Simplemente crea tu propio diseño para la actividad de configuración que contiene la vista de lista con id @android: id / list

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/fragment" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp"> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout> <Button android:id="@+id/button" android:text="Save" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Y luego en la clase de actividad establecer la vista de contenido antes de agregar el fragmento de preferencia

 public class SettingsActivity extends Activity { @Override public void onCreate( Bundle savedInstanceState) { super.onCreate( savedInstanceState); setContentView(R.layout.settings_activity) // load up the preferences fragment getFragmentManager().beginTransaction().replace( android.R.id.content, new PrefsSettingsFragment()).commit(); } } 

Puedes probar esto

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub LinearLayout v = (LinearLayout) super.onCreateView(inflater, container, savedInstanceState); Button SendLogbtn = new Button(getActivity().getApplicationContext()); SendLogbtn.setText("send log file"); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(100, 0, 0, 500); SendLogbtn.setLayoutParams(params); v.addView(SendLogbtn); SendLogbtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // do your code } }); return v; } 
  • Cómo borrar las viejas preferencias al actualizar la aplicación de Android?
  • Actividad de preferencias de Android IllegalArgumentException: fragmento no válido para esta actividad
  • Cómo obtener un valor de preferencia en fragmento de preferencia
  • ¿cómo puedo establecer el valor marcado en ListPreference
  • ¿Cómo se declara el tipo de preferencia de Android?
  • Android: Cómo almacenar una matriz de cadenas en SharedPreferences para android
  • Mostrar el botón de arriba en la barra de acción en las preferencias de la pantalla principal
  • ¿Es seguro guardar los tokens de acceso / actualización de Oauth2 en las Preferencias compartidas de Android?
  • DefaultValue de archivo de preferencia de xml no está almacenado - ¿por qué?
  • Preferencias de Android: ¿Cómo cargar los valores predeterminados cuando el usuario no ha utilizado la pantalla de preferencias?
  • ¿Cómo regresar de la pantalla de preferencias a la actividad principal?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.