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:
- ¿Cuál es el nombre de archivo utilizado por defecto las preferencias compartidas?
- Preferencias de Android, cómo establecer la dependencia de las preferencias personalizadas
- Cómo utilizar PreferenceFragment?
- Obtener SharedPreferences de un servicio
- Pantalla de Preferencias de Android sin XML
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>
- ¿Por qué Custom DialogPreference no se activa en onSharedPreferenceChanged?
- Abrir EditTextPreference a través del código (programatically)
- Uso de la preferencia de lista en Android
- Uso de preferencias no predeterminadas en PreferenceActivity
- ¿Cómo obtener preferencias de tono en tiempo de ejecución?
- Cómo vincular el archivo de preferencias automáticas a las preferencias personalizadas en android
- Utilizar una subclase personalizada de SharedPreferences con PreferenceActivity o PreferenceFragment
- Android registerOnSharedPreferenceChangeListener () causa bloqueo en una vista personalizada
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; }
- ¿Cuáles son los valores "pausados" en los mensajes de registro GC_CONCURRENT?
- ¿Dónde colocar el archivo OBB para probar los archivos de paquete de expansión de Android (OBB) en mi Nexus 4?