특수화된 조각 클래스Specialized Fragment Classes

조각 API는 응용 프로그램에서 찾을 수 있는 몇 가지 일반적인 기능을 캡슐화 하는 다른 서브 클래스를 제공 합니다.The Fragments API provides other subclasses that encapsulate some of the more common functionality found in applications. 이러한 서브 클래스는 다음과 같습니다.These subclasses are:

  • 조각이 – 배열 또는 커서와 같은 데이터 원본에 바인딩된 항목의 목록을 표시 하는 데 사용 됩니다.ListFragment – This Fragment is used to display a list of items bound to a datasource such as an array or a cursor.

  • 이 조각을 사용 하는 dialogfragment – 대화 상자의 래퍼로 사용 됩니다.DialogFragment – This Fragment is used as a wrapper around a dialog. 조각은 활동의 맨 위에 대화 상자를 표시 합니다.The Fragment will display the dialog on top of its Activity.

  • PreferenceFragment –이 조각은 기본 설정 개체를 목록으로 표시 하는 데 사용 됩니다.PreferenceFragment – This Fragment is used to show Preference objects as lists.

ListFragmentThe ListFragment

ListFragment는 개념과 기능에서 ListActivity와 매우 비슷합니다. 조각에서 ListView를 호스팅하는 래퍼입니다.The ListFragment is very similar in concept and functionality to the ListActivity; it is a wrapper that hosts a ListView in a Fragment. 아래 이미지는 태블릿 및 휴대폰에서 실행 되는 ListFragment을 보여줍니다.The image below shows a ListFragment running on a tablet and a phone:

태블릿 및 휴대폰에서 ListFragment의스크린샷Screenshots of ListFragment on a tablet and on a phone

ListAdapter를 사용 하 여 데이터 바인딩Binding Data With The ListAdapter

ListFragment 클래스는 이미 기본 레이아웃을 제공 하므로 ListFragment내용을 표시 하기 위해 OnCreateView를 재정의할 필요가 없습니다.The ListFragment class already provides a default layout, so it is not necessary to override OnCreateView to display the contents of the ListFragment. ListViewListAdapter 구현을 사용 하 여 데이터에 바인딩됩니다.The ListView is bound to data by using a ListAdapter implementation. 다음 예제에서는 간단한 문자열 배열을 사용 하 여이 작업을 수행 하는 방법을 보여 줍니다.The following example shows how this could be done by using a simple array of strings:

public override void OnActivityCreated(Bundle savedInstanceState)
{
    base.OnActivityCreated(savedInstanceState);
    string[] values = new[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
    this.ListAdapter = new ArrayAdapter<string>(Activity, Android.Resource.Layout.SimpleExpandableListItem1, values);
}

ListAdapter를 설정 하는 경우 ListView.ListAdapter 속성이 아닌 ListFragment.ListAdapter 속성을 사용 하는 것이 중요 합니다.When setting the ListAdapter, it is important to use the ListFragment.ListAdapter property, and not the ListView.ListAdapter property. ListView.ListAdapter를 사용 하면 중요 한 초기화 코드를 건너뛸 수 있습니다.Using ListView.ListAdapter will cause important initialization code to be skipped.

사용자 선택에 응답Responding to User Selection

사용자 선택 항목에 응답 하려면 응용 프로그램이 OnListItemClick 메서드를 재정의 해야 합니다.To respond to user selections, an application must override the OnListItemClick method. 다음 예에서는 이러한 가능성을 보여 줍니다.The following example shows one such possibility:

public override void OnListItemClick(ListView l, View v, int index, long id)
{
    // We can display everything in place with fragments.
    // Have the list highlight this item and show the data.
    ListView.SetItemChecked(index, true);

    // Check what fragment is shown, replace if needed.
    var details = FragmentManager.FindFragmentById<DetailsFragment>(Resource.Id.details);
    if (details == null || details.ShownIndex != index)
    {
        // Make new fragment to show this selection.
        details = DetailsFragment.NewInstance(index);

        // Execute a transaction, replacing any existing
        // fragment with this one inside the frame.
        var ft = FragmentManager.BeginTransaction();
        ft.Replace(Resource.Id.details, details);
        ft.SetTransition(FragmentTransit.FragmentFade);
        ft.Commit();
    }
}

위의 코드에서 사용자가 ListFragment항목을 선택 하면 호스팅 활동에 새 조각이 표시 되어 선택한 항목에 대 한 세부 정보가 표시 됩니다.In the code above, when the user selects an item in the ListFragment, a new Fragment is displayed in the hosting Activity, showing more details about the item that was selected.

DialogFragmentDialogFragment

Dialogfragment 는 활동의 창 위에 배치 될 조각 내부에 대화 상자 개체를 표시 하는 데 사용 되는 조각입니다.The DialogFragment is a Fragment that is used to display a dialog object inside of a Fragment that will float on top of the Activity's window. 이는 관리 되는 대화 상자 Api (Android 3.0에서 시작)를 대체 하기 위한 것입니다.It is meant to replace the managed dialog APIs (starting in Android 3.0). 다음 스크린샷은 DialogFragment의 예를 보여 줍니다.The following screenshot shows an example of a DialogFragment:

새 차량 추가 입력란을 표시 하는 DialogFragment의스크린샷Screenshot of DialogFragment displaying Add New Vehicle EditBox

DialogFragment는 조각과 대화 상자 간의 상태를 일관 되 게 유지 합니다.A DialogFragment ensures that the state between the Fragment and the dialog remain consistent. 대화 상자 개체에 대 한 모든 상호 작용 및 제어는 DialogFragment API를 통해 수행 되어야 하며 대화 상자 개체에 대 한 직접 호출로 생성 되지 않습니다.All interactions and control of the dialog object should happen through the DialogFragment API, and not be made with direct calls on the dialog object. DialogFragment API는 각 인스턴스에 조각을 표시 하는 데 사용 되는 Show() 메서드를 제공 합니다.The DialogFragment API provides each instance with a Show() method that is used to display a Fragment. 다음 두 가지 방법으로 조각을 제거할 수 있습니다.There are two ways to get rid of a Fragment:

  • DialogFragment 인스턴스에서 DialogFragment.Dismiss()를 호출 합니다.Call DialogFragment.Dismiss() on the DialogFragment instance.

  • 다른 DialogFragment를 표시 합니다.Display another DialogFragment.

DialogFragment를 만들려면 클래스가 Android.App.DialogFragment,에서 상속 된 후 다음 두 메서드 중 하나를 재정의 합니다.To create a DialogFragment, a class inherits from Android.App.DialogFragment, and then overrides one of the following two methods:

  • Oncreateview – 뷰를 만들어 반환 합니다.OnCreateView – This creates and returns a view.

  • Oncreatedialog – 사용자 지정 대화 상자를 만듭니다.OnCreateDialog – This creates a custom dialog. 일반적으로 Alertdialog를 표시 하는 데 사용 됩니다.It is typically used to show an AlertDialog. 이 메서드를 재정의 하는 경우 OnCreateView를 재정의할 필요가 없습니다.When overriding this method, it is not necessary to override OnCreateView .

간단한 DialogFragmentA Simple DialogFragment

다음 스크린샷은 TextView와 두 개의 Button를 포함 하는 간단한 DialogFragment을 보여 줍니다.The following screenshot shows a simple DialogFragment that has a TextView and two Buttons:

TextView 및 두 개의 단추를 사용 하는 DialogFragment예제Example DialogFragment with a TextView and two buttons

TextView는 사용자가 DialogFragment에서 한 단추를 클릭 한 횟수를 표시 하 고 다른 단추를 클릭 하면 조각이 닫힙니다.The TextView will display the number of times that the user has clicked one button in the DialogFragment, while clicking the other button will close the Fragment. DialogFragment 코드는 다음과 같습니다.The code for DialogFragment is:

public class MyDialogFragment : DialogFragment
{
    private int _clickCount;
    public override void OnCreate(Bundle savedInstanceState)
    {
        _clickCount = 0;
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState)
        
        var view = inflater.Inflate(Resource.Layout.dialog_fragment_layout, container, false);
        var textView = view.FindViewById<TextView>(Resource.Id.dialog_text_view);
            
        view.FindViewById<Button>(Resource.Id.dialog_button).Click += delegate
            {
                textView.Text = "You clicked the button " + _clickCount++ + " times.";
            };

        // Set up a handler to dismiss this DialogFragment when this button is clicked.
        view.FindViewById<Button>(Resource.Id.dismiss_dialog_button).Click += (sender, args) => Dismiss();
        return view;
        }
    }
}

조각 표시Displaying a Fragment

모든 조각과 마찬가지로 DialogFragment FragmentTransaction컨텍스트에 표시 됩니다.Like all Fragments, a DialogFragment is displayed in the context of a FragmentTransaction.

DialogFragment에 대 한 Show() 메서드는 FragmentTransactionstring를 입력으로 사용 합니다.The Show() method on a DialogFragment takes a FragmentTransaction and a string as an input. 대화 상자가 활동에 추가 되 고 FragmentTransaction 커밋됩니다.The dialog will be added to the Activity, and the FragmentTransaction committed.

다음 코드에서는 작업에서 Show() 메서드를 사용 하 여 DialogFragment를 표시 하는 한 가지 방법을 보여 줍니다.The following code demonstrates one possible way an Activity may use the Show() method to show a DialogFragment:

public void ShowDialog()
{
    var transaction = FragmentManager.BeginTransaction();
    var dialogFragment = new MyDialogFragment();
    dialogFragment.Show(transaction, "dialog_fragment");
}

조각 해제Dismissing a Fragment

DialogFragment 인스턴스에서 Dismiss()를 호출 하면 조각이 작업에서 제거 되 고 해당 트랜잭션이 커밋됩니다.Calling Dismiss() on an instance of a DialogFragment causes a Fragment to be removed from the Activity and commits that transaction. 조각의 소멸과 관련 된 표준 조각 수명 주기 메서드가 호출 됩니다.The standard Fragment lifecycle methods that are involved with the destruction of a Fragment will be called.

경고 대화 상자Alert Dialog

OnCreateView를 재정의 하는 대신 DialogFragment OnCreateDialog를 재정의할 수 있습니다.Instead of overriding OnCreateView, a DialogFragment may instead override OnCreateDialog. 이렇게 하면 응용 프로그램에서 조각으로 관리 되는 Alertdialog 를 만들 수 있습니다.This allows an application to create an AlertDialog that is managed by a Fragment. 다음 코드는 AlertDialog.Builder를 사용 하 여 Dialog을 만드는 예입니다.The following code is an example that uses the AlertDialog.Builder to create a Dialog:

public class AlertDialogFragment : DialogFragment
{
    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        EventHandler<DialogClickEventArgs> okhandler;
        var builder = new AlertDialog.Builder(Activity)
            .SetMessage("This is my dialog.")
            .SetPositiveButton("Ok", (sender, args) =>
                                         {
                                             // Do something when this button is clicked.
                                         })
            .SetTitle("Custom Dialog");
        return builder.Create();
    }
}

PreferenceFragmentPreferenceFragment

기본 설정 관리를 돕기 위해 조각 API는 PreferenceFragment 하위 클래스를 제공 합니다.To help manage preferences, the Fragments API provides the PreferenceFragment subclass. PreferenceFragment는 – PreferenceActivity 와 비슷하며 사용자에 게 기본 설정의 계층 구조가 표시 됩니다.The PreferenceFragment is similar to the PreferenceActivity – it will show a hierarchy of preferences to the user in a Fragment. 사용자가 기본 설정과 상호 작용 하면 자동으로 Sharedpreferences 설정에 저장 됩니다.As the user interacts with the preferences, they will be automatically saved to SharedPreferences. Android 3.0 이상의 응용 프로그램에서 PreferenceFragment를 사용 하 여 응용 프로그램에서 기본 설정을 처리 합니다.In Android 3.0 or higher applications, use the PreferenceFragment to deal with preferences in applications. 다음 그림에서는 PreferenceFragment의 예를 보여 줍니다.The following picture shows an example of a PreferenceFragment:

인라인, 대화 상자 및 시작 기본 설정을 사용 하는예제 PreferencesFragmentExample PreferencesFragment with inline, dialog, and launch preferences

리소스에서 기본 설정 조각 만들기Create A Preference Fragment from a Resource

기본 설정 조각은 PreferenceFragment. AddPreferencesFromResource 메서드를 사용 하 여 XML 리소스 파일에서 팽창 수 있습니다.The preference Fragment may be inflated from an XML resource file by using the PreferenceFragment.AddPreferencesFromResource method. 조각의 수명 주기에서이 메서드를 호출 하는 논리적 위치가 OnCreate 메서드에 있습니다.A logical place to call this method in the lifecycle of the Fragment would be in the OnCreate method.

위의 PreferenceFragment XML에서 리소스를 로드 하 여 만들었습니다.The PreferenceFragment pictured above was created by loading a resource from XML. 리소스 파일은 다음과 같습니다.The resource file is:

<?xml version="1.0" encoding="utf-8"?>

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

  <PreferenceCategory android:title="Inline Preferences">
    <CheckBoxPreference android:key="checkbox_preference"
                        android:title="Checkbox Preference Title"
                        android:summary="Checkbox Preference Summary" />

  </PreferenceCategory>

  <PreferenceCategory android:title="Dialog Based Preferences">

    <EditTextPreference android:key="edittext_preference"
                        android:title="EditText Preference Title"
                        android:summary="EditText Preference Summary"
                        android:dialogTitle="Edit Text Preferrence Dialog Title" />

  </PreferenceCategory>

  <PreferenceCategory android:title="Launch Preferences">

    <!-- This PreferenceScreen tag serves as a screen break (similar to page break
             in word processing). Like for other preference types, we assign a key
             here so it is able to save and restore its instance state. -->
    <PreferenceScreen android:key="screen_preference"
                      android:title="Title Screen Preferences"
                      android:summary="Summary Screen Preferences">

      <!-- You can place more preferences here that will be shown on the next screen. -->

      <CheckBoxPreference android:key="next_screen_checkbox_preference"
                          android:title="Next Screen Toggle Preference Title"
                          android:summary="Next Screen Toggle Preference Summary" />

    </PreferenceScreen>

    <PreferenceScreen android:title="Intent Preference Title"
                      android:summary="Intent Preference Summary">

      <intent android:action="android.intent.action.VIEW"
              android:data="http://www.android.com" />

    </PreferenceScreen>

  </PreferenceCategory>

</PreferenceScreen>

기본 설정 조각에 대 한 코드는 다음과 같습니다.The code for the preference Fragment is as follows:

public class PrefFragment : PreferenceFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        AddPreferencesFromResource(Resource.Xml.preferences);
    }
}

작업을 쿼리하여 기본 설정 조각 만들기Querying Activities to Create a Preference Fragment

PreferenceFragment를 만드는 다른 방법에는 작업 쿼리가 포함 됩니다.Another technique for creating a PreferenceFragment involves querying Activities. 각 활동은 XML 리소스 파일을 가리키는 메타 데이터_KEY_기본 설정 특성을 사용할 수 있습니다.Each Activity can use the METADATA_KEY_PREFERENCE attribute that will point to an XML resource file. Xamarin.ios에서 MetaDataAttribute작업을 표시할 하 고 사용할 리소스 파일을 지정 하 여이 작업을 수행 합니다.In Xamarin.Android, this is done by adorning an Activity with the MetaDataAttribute, and then specifying the resource file to use. PreferenceFragment 클래스는 활동을 쿼리하여이 XML 리소스를 찾고이에 대 한 기본 설정 계층을 확장 하는 데 사용할 수 있는 AddPreferenceFromIntent 메서드를 제공 합니다.The PreferenceFragment class provides the method AddPreferenceFromIntent that can be used to query an Activity to find this XML resource and inflate a preference hierarchy for it.

이 프로세스의 예제는 다음 코드 조각에서 제공 됩니다 .이 코드 조각에서는 AddPreferencesFromIntent를 사용 하 여 PreferenceFragment를 만듭니다.An example of this process is provided in the following code snippet, which uses AddPreferencesFromIntent to create a PreferenceFragment:

public class MyPreferenceFragment : PreferenceFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        var intent = new Intent(this.Activity, typeof (MyActivityWithPreferences));
        AddPreferencesFromIntent(intent);
    }
}

Android는 MyActivityWithPreference클래스를 확인 합니다.Android will look at the class MyActivityWithPreference. 클래스는 다음 코드 조각과 같이 MetaDataAttribute, 표시 되어야 합니다.The class must be adorned with the MetaDataAttribute, as shown in the following code snippet:

[Activity(Label = "My Activity with Preferences")]
[MetaData(PreferenceManager.MetadataKeyPreferences, Resource = "@xml/preference_from_intent")]
public class MyActivityWithPreferences : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // This is deliberately blank
    }
}

MetaDataAttributePreferenceFragment 기본 설정 계층을 확장 하는 데 사용 하는 XML 리소스 파일을 선언 합니다.The MetaDataAttribute declares an XML resource file that the PreferenceFragment will use to inflate the preference hierarchy. MetatDataAttribute 제공 되지 않으면 런타임에 예외가 throw 됩니다.If the MetatDataAttribute is not provided, then an exception will be thrown at run time. 이 코드가 실행 되 면 PreferenceFragment 다음 스크린샷에 표시 됩니다.When this code runs, the PreferenceFragment appears as in the following screenshot:

PreferenceFragment가 표시 된 예제 앱의스크린샷Screenshot of example app with PreferenceFragment displayed