2017-01-23 2 views
-1

Dies ist die einfachste Code, der uns zur Verfügung gestellten, wenn wir SettingActivityWie fügt man Header in das Fragment ein, wenn ich also auf Header klicke, kann ich ein anderes Fragment bekommen?

package com.example.amit.ak505; 


    import android.annotation.TargetApi; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.res.Configuration; 
    import android.media.Ringtone; 
    import android.media.RingtoneManager; 
    import android.net.Uri; 
    import android.os.Build; 
    import android.os.Bundle; 
    import android.preference.ListPreference; 
    import android.preference.Preference; 
    import android.preference.PreferenceActivity; 
    import android.support.v7.app.ActionBar; 
    import android.preference.PreferenceFragment; 
    import android.preference.PreferenceManager; 
    import android.preference.RingtonePreference; 
    import android.text.TextUtils; 
    import android.view.MenuItem; 
    import java.util.List; 
    import static com.example.amit.ak505.R.layout.button_xml; 

    /** 
    * A {@link PreferenceActivity} that presents a set of application 
    settings. 
    On 
    * handset devices, settings are presented as a single list. On tablets, 
    * settings are split by category, with category headers shown to the left 
    of 
    * the list of settings. 
    * <p> 
    * See <a 
     href="http://developer.android.com/design/patterns/settings.html"> 
    * Android Design: Settings</a> for design guidelines and the <a 

    *href="http://developer.android.com/guide/topics/ui/ 
    settings.html">Settings 
    * API Guide</a> for more information on developing a Settings UI. 
    */ 
    public class SettingsActivity extends AppCompatPreferenceActivity { 
    /** 
    * A preference value change listener that updates the preference's 
    summary 
    * to reflect its new value. 
    */ 
    private static Preference.OnPreferenceChangeListener 
    sBindPreferenceSummaryToValueListener = new 
    Preference.OnPreferenceChangeListener() { 
    @Override 
    public boolean onPreferenceChange(Preference preference, Object value) { 
     String stringValue = value.toString(); 

     if (preference instanceof ListPreference) { 
      // For list preferences, look up the correct display value in 
      // the preference's 'entries' list. 
      ListPreference listPreference = (ListPreference) preference; 
      int index = listPreference.findIndexOfValue(stringValue); 

      // Set the summary to reflect the new value. 
      preference.setSummary(
        index >= 0 
          ? listPreference.getEntries()[index] 
          : null); 

     } else if (preference instanceof RingtonePreference) { 
      // For ringtone preferences, look up the correct display value 
      // using RingtoneManager. 
      if (TextUtils.isEmpty(stringValue)) { 
       // Empty values correspond to 'silent' (no ringtone). 
       preference.setSummary(R.string.pref_ringtone_silent); 

      } else { 
       Ringtone ringtone = RingtoneManager.getRingtone(
         preference.getContext(), Uri.parse(stringValue)); 

       if (ringtone == null) { 
        // Clear the summary if there was a lookup error. 
        preference.setSummary(null); 
       } else { 
        // Set the summary to reflect the new ringtone display 
        // name. 
        String name =ringtone.getTitle(preference.getContext()); 
        preference.setSummary(name); 
       } 
      } 

     } else { 
      // For all other preferences, set the summary to the value's 
      // simple string representation. 
      preference.setSummary(stringValue); 
     } 
     return true; 
     } 
    }; 

    /** 
     * Helper method to determine if the device has an extra-large screen. 
    For 
    * example, 10" tablets are extra-large. 
    */ 
    private static boolean isXLargeTablet(Context context) { 
    return (context.getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK) 
      >=Configuration.SCREENLAYOUT_SIZE_XLARGE; 
    } 

    /** 
    * Binds a preference's summary to its value. More specifically, when the 
    * preference's value is changed, its summary (line of text below the 
    * preference title) is updated to reflect the value. The summary is also 
    * immediately updated upon calling this method. The exact display format  
    is 
    * dependent on the type of preference. 
    * 
    * @see #sBindPreferenceSummaryToValueListener 
    */ 
    private static void bindPreferenceSummaryToValue(Preference preference) { 
    // Set the listener to watch for value changes. 
    preference.setOnPreferenceChangeListener 
     (sBindPreferenceSummaryToValueListener); 

    // Trigger the listener immediately with the preference's 
    // current value. 
    sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, 
      PreferenceManager 
        .getDefaultSharedPreferences(preference.getContext()) 
        .getString(preference.getKey(), "")); 
    } 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.button_xml); 
    setupActionBar(); 
    } 

    /** 
    * Set up the {@link android.app.ActionBar}, if the API is available. 
    */ 
    private void setupActionBar() { 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
     // Show the Up button in the action bar. 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 
    } 

    /** 
* { 
    @inheritDoc} 
*/ 
@Override 
public boolean onIsMultiPane() { 
    return isXLargeTablet(this); 
} 

/** 
* {@inheritDoc} 
*/ 
@Override 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public void onBuildHeaders(List<Header> target) { 
    loadHeadersFromResource(R.xml.pref_headers, target); 
} 

/** 
* This method stops fragment injection in malicious applications. 
* Make sure to deny any unknown fragments here. 
*/ 
    protected boolean isValidFragment(String fragmentName) { 
    return PreferenceFragment.class.getName().equals(fragmentName) 
      ||GeneralPreferenceFragment.class.getName().equals(fragmentName) 
      ||DataSyncPreferenceFragment.class.getName().equals(fragmentName) 
     ||NotificationPreferenceFragment.class.getName().equals(fragmentName); 
    } 

/** 
* This fragment shows general preferences only. It is used when the 
* activity is showing a two-pane settings UI. 
*/ 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public static class GeneralPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_general); 
     addPreferencesFromResource(R.xml.pref_data_sync); 
     setHasOptionsMenu(true); 

     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
     bindPreferenceSummaryToValue(findPreference("example_text")); 
     bindPreferenceSummaryToValue(findPreference("example_list")); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      startActivity(new Intent(getActivity(),SettingsActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

/** 
* This fragment shows notification preferences only. It is used when the 
* activity is showing a two-pane settings UI. 
*/ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class NotificationPreferenceFragment 
extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_notification); 
     setHasOptionsMenu(true); 
     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
      bindPreferenceSummaryToValue(findPreference(" 
      notifications_new_message_ringtone")); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      startActivity(new Intent(getActivity(),SettingsActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

/** 
* This fragment shows data and sync preferences only. It is used when the 
* activity is showing a two-pane settings UI. 
    */ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class DataSyncPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_data_sync); 
     setHasOptionsMenu(true); 
     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
     bindPreferenceSummaryToValue(findPreference("sync_frequency")); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      startActivity(new Intent(getActivity(),SettingsActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
    } 

general_pref.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<SwitchPreference 
    android:defaultValue="true" 
    android:key="example_switch" 
    android:summary="@string/pref_description_social_recommendations" 
    android:title="@string/pref_title_social_recommendations" /> 

     <!-- NOTE: EditTextPreference accepts EditText attributes. --> 
     <!-- NOTE: EditTextPreference's summary should be set to its value by 
     the activity code. --> 
    <EditTextPreference 
    android:capitalize="words" 
    android:defaultValue="@string/pref_default_display_name" 
    android:inputType="textCapWords" 
    android:key="example_text" 
    android:maxLines="1" 
    android:selectAllOnFocus="true" 
    android:singleLine="true" 
    android:title="@string/pref_title_display_name" /> 

    <!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the 
    dialog to 
    dismiss it. --> 

    <ListPreference 
    android:defaultValue="-1" 
    android:entries="@array/pref_example_list_titles" 
    android:entryValues="@array/pref_example_list_values" 
    android:key="example_list" 
    android:negativeButtonText="@null" 
    android:positiveButtonText="@null" 
    android:title="@string/pref_title_add_friends_to_messages" /> 

    </PreferenceScreen> 

Alles, was ich möchte einen Header in general_pref.xml.on Klick hinzufügen, bei der Verwendung Ich kann ein neues Fragment beginnen.

Ist es möglich Header in general_pref.xml zu verwenden?

+0

Bitte entfernen Sie zusätzliche Kommentare und zusätzlichen Abstand, damit wir Ihren Code leicht verstehen –

Antwort

1

Fügen Sie diese an der Spitze Ihrer allgemeinen Präferenz mit Ihrem eigenen Layout (für Header)

<Preference 
    android:key="launchFragment" 
    android:title="Fragment Header" 
    android:layout="@layout/my_custom_layout"/> 

und aktualisieren Sie die GeneralPreferenceFragment zu -

public static class GeneralPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) {.... 
    Preference preference = findPreference("launchFragment"); 
     preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       // launch fragment 
       return false; 
      } 
     }); 

Es im Grunde eine Präferenz Zugabe wird Artikel auf der Oberseite und Umgang mit seiner Klick-Methode. Hoffe das hilft!

+0

gute Erklärung mit kurzen Schnipsel –

+0

Vielen Dank Anindita Pani.it hat sehr gut funktioniert –

+0

@Anindita Pani. Kann ich irgendwie die ID der allgemeinen Präferenz finden, so dass ich das aktuelle Fragment durch irgendein anderes Fragment mit dem Code ft.replace ersetzen kann (R.id.fragment_id, Fragment); anstelle der Fragment-ID erklären Sie bitte auch, wie Sie die Fragment-Container-ID finden –

Verwandte Themen