Ajouter des boutons à PreferenceFragment

Je souhaite ajouter quelques boutons au bas de mon écran de préférences pour définir les valeurs par défaut et restaurer les valeurs par défaut. Cette réponse ne couvre pas la façon de procéder à l'aide de PreferenceFragment. Quelle est la façon recommandée d'accomplir cela.

Activité qui charge le fragment de préférences:

  • Exécutez un code uniquement une fois qu'une application est installée
  • Android - PreferenceActivity - Changer la couleur du texte sommaire de CheckBoxPreference
  • Les écrans de préférences imbriqués perdent
  • Quel fichier de paramètres préfère-t-il lire / écrire?
  • Comment puis-je sauvegarder SharedPreferences sur une carte SD?
  • Android: Aucune activité trouvée pour gérer l'erreur d'intention? Comment ça va résoudre
  • 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(); } } 

    Mise en œuvre du fragment de préférences:

     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> 

  • Android: comment accéder par programme au numéro de série du périphérique affiché dans le gestionnaire AVD (API Version 8)
  • Obtenir le numéro de série du matériel Android
  • Comment trouver le numéro de série de l'appareil Android?
  • Comment obtenir des numéros mobiles si mon téléphone Android possède deux cartes SIM?
  • 4 Solutions collect form web for “Ajouter des boutons à PreferenceFragment”

    Je rencontre la même question, et j'ai trouvé un moyen de résoudre ce problème.

    Écraser la méthode onCreateView dans PreferenceFragment, en utilisant le LayoutInfalter par les paramètres pour créer votre propre vue et renvoyer cette vue.

    C'est mon code. J'espère que cela peut être utile

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

    J'ai modifié le message précédent un peu, de sorte que le bouton s'attache au bas de la vue.

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

    Créez simplement votre propre mise en page pour l'activité de paramètres qui contient une vue de liste avec 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> 

    Ensuite, dans la classe d'activité, définissez la vue de contenu avant d'ajouter un fragment de préférence

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

    Vous pouvez essayer ceci

     @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; } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.