Fragment in android xamarin

Реализация фрагментов кода — пошаговое руководство

Фрагменты — это автономные модульные компоненты, которые могут помочь в устранении сложности приложений Android, предназначенных для устройств с различными размерами экранов. В этой статье рассматривается создание и использование фрагментов при разработке приложений Xamarin. Android.

Обзор

В этом разделе вы узнаете, как создавать и использовать фрагменты в приложении Xamarin.Android. Это приложение будет отображать названия нескольких пьес Уильяма Шекспира в списке. Когда пользователь нажимает название пьесы, приложение будет отображать цитату из этой пьесы в отдельном действии:

Когда телефон возвращается к альбомной ориентации, внешний вид приложения изменится: как список пьес, так и цитаты будут отображаться в одном и том же действии. Если выбрана пьеса, цитата будет отображаться в том же действии:

Наконец, если приложение запущено на планшете:

Этот пример приложения можно легко адаптировать к различным формфакторам и ориентациям с минимальными изменениями кода, используя фрагменты и альтернативные макеты.

Данные для приложения будут находиться в двух строковых массивах, которые прописаны в приложении C# в виде строковых массивов. Каждый массив будет служить источником данных для одного фрагмента. Один массив будет содержать название пьесы Шекспира, а другой массив будет содержать цитату из нее. При запуске приложение будет отображать названия пьес в ListFragment . Когда пользователь нажимает название пьесы в ListFragment , приложение запустит другое действие, которое будет отображать цитату.

Пользовательский интерфейс для приложения будет состоять из двух макетов: один для книжной и один для альбомной ориентации. Во время выполнения Android определит, какой макет загружать в зависимости от ориентации устройства, и предоставит этот макет действию для подготовки к преобразованию для просмотра. Вся логика реагирования на нажатие пользователем и отображение данных будет содержаться в фрагментах. Действия в приложении существуют только в качестве контейнеров, в которых будут размещаться фрагменты.

Это пошаговое руководство будет разбито на два руководства. Первая часть будет посвящена основным частям приложения. Будет создан один набор макетов (оптимизированных для книжной ориентации), а также два фрагмента и два действия:

  1. MainActivity это действие запуска приложения.
  2. TitlesFragment — этот фрагмент позволяет отобразить список названий пьес, написанных Уильямом Шекспиром. Он размещается в MainActivity .
  3. PlayQuoteActivity TitlesFragment Запустится PlayQuoteActivity в ответ на пользователя, который выбирает воспроизведение в TitlesFragment .
  4. PlayQuoteFragment — этот фрагмент позволяет отобразить цитату из пьесы Уильяма Шекспира. Он размещается в PlayQuoteActivity .

Во второй части этого пошагового руководства будет рассматриваться добавление альтернативного макета (оптимизированного для альбомной ориентации), в котором на экране отображаются оба фрагмента. Кроме того, в код будут внесены некоторые небольшие изменения, чтобы приложение адаптировало свое поведение к количеству фрагментов, одновременно отображаемых на экране.

Источник

Пример фрагментов — Телефон

Это первая часть пошагового руководства, в рамках которого будет создано приложение Xamarin.Android, предназначенное для устройства Android в книжной ориентации. В этом пошаговом руководстве рассказывается, как создавать фрагменты в Xamarin.Android и как добавлять их в пример.

Для этого приложения будут созданы следующие классы:

  1. PlayQuoteFragment — этот фрагмент позволяет отобразить цитату из пьесы Уильяма Шекспира. Он размещается в PlayQuoteActivity .
  2. Shakespeare — этот класс будет содержать два жестко зафиксированных массива в качестве свойств.
  3. TitlesFragment — этот фрагмент позволяет отобразить список названий пьес, написанных Уильямом Шекспиром. Он размещается в MainActivity .
  4. PlayQuoteActivity TitlesFragment Запустится PlayQuoteActivity в ответ на пользователя, который выбирает воспроизведение в TitlesFragment .
Читайте также:  Как запустить андроид кирпич

1. Создание проекта Android

Создайте проект Xamarin.Android с именем FragmentSample.

Для работы с этим пошаговым руководством рекомендуем выбрать современную разработку.

После создания проекта переименуйте файл layout/Main.axml в layout/activity_main.axml.

2. Добавление данных

Данные для этого приложения будут храниться в двух жестко зафиксированных строковых массивах, являющихся свойствами имени класса Shakespeare :

  • Shakespeare.Titles — этот массив будет содержать список пьес Уильяма Шекспира. Это источник данных для TitlesFragment .
  • Shakespeare.Dialogue — этот массив будет содержать список цитат из одной из пьес, указанных в Shakespeare.Titles . Это источник данных для PlayQuoteFragment .

Добавьте новый класс C# в проект FragmentSample и присвойте ему имя Shakespeare.cs. В этом файле создайте новый класс C# с именем Shakespeare и следующим содержимым:

3. Создание PlayQuoteFragment

С помощью фрагмента Android PlayQuoteFragment будет отображаться цитата из пьесы Шекспира, выбранной пользователем ранее в приложении. Этот фрагмент не будет использовать файл макета Android, а будет динамически создавать свой пользовательский интерфейс. Добавьте в проект новый класс Fragment с именем PlayQuoteFragment .

Затем измените код этого фрагмента таким образом, чтобы он соответствовал следующему фрагменту кода:

В приложениях Android часто используется методика предоставления фабричного метода, с помощью которого будет создаваться экземпляр фрагмента. Это гарантирует, что фрагмент будет создан с необходимыми параметрами для правильной работы. В этом пошаговом руководстве предполагается, что приложение применит метод PlayQuoteFragment.NewInstance для создания нового фрагмента при каждом выборе цитаты. NewInstance Метод принимает один параметр — индекс цитаты для вывода.

Android будет вызывать метод OnCreateView для отображения фрагмента на экране. Метод возвращает объект Android View , который является фрагментом. Этот фрагмент не использует файл макета для создания представления. Вместо этого он будет программными средствами создавать представление, создавая экземпляр TextView для хранения цитаты, и отображать мини-приложение в ScrollView.

Подклассы фрагмента должны использовать открытый конструктор по умолчанию без параметров.

4. Создание PlayQuoteActivity

Фрагменты должны размещаться внутри действия. Поэтому для этого приложения нужно создать действие, в котором будет размещаться PlayQuoteFragment . Действие позволит динамически добавить этот фрагмент в макет во время выполнения. Добавьте в приложение новое действие и присвойте ему имя PlayQuoteActivity .

Измените код в PlayQuoteActivity следующим образом:

При создании PlayQuoteActivity он будет создавать экземпляр нового фрагмента PlayQuoteFragment и загружать его в корневое представление в контексте FragmentTransaction . Обратите внимание, что при этом действии файл макета Android не загружается для пользовательского интерфейса. Вместо этого в корневое представление приложения добавляется новый фрагмент PlayQuoteFragment . Идентификатор ресурса Android.Resource.Id.Content используется для ссылки на корневое представление действия без указания его идентификатора.

5. Создание TitlesFragment

TitlesFragment позволяет создать подкласс специализированного фрагмента, известного как ListFragment , который содержит логику для отображения ListView в нашем фрагменте. ListFragment предоставляет свойство ListAdapter (которое ListView использует для отображения содержимого) и обработчик событий с именем OnListItemClick , что позволяет фрагменту реагировать на нажатия строки, отображаемой ListView .

Чтобы приступить к работе, добавьте в проект новый фрагмент и присвойте ему имя TitlesFragment:

Измените код внутри фрагмента следующим образом:

При создании действия Android вызовет метод OnCreate из фрагмента. На этом этапе создается адаптер списка для ListView . Метод ShowQuoteFromPlay запустит экземпляр PlayQuoteActivity , чтобы отобразить цитату из выбранной пьесы.

Читайте также:  Android x86 только командная строка

Отображение TitlesFragment в MainActivity

И наконец, нам нужно отобразить TitlesFragment внутри MainActivity . При действии фрагмент не загружается динамически. Вместо этого фрагмент будет статически загружен путем объявления его в элементе fragment файла макета для этого действия. Загружаемый фрагмент определяется путем назначения атрибута android:name классу фрагмента (включая пространство имен для типа). Например, для использования TitlesFragment свойству android:name нужно присвоить значение FragmentSample.TitlesFragment .

Измените файл макета activity_main.axml, заменив существующий XML следующим:

Атрибут class — допустимая замена для android:name . Нет официальных рекомендаций по выбору того или иного варианта. Во многих базах кода class и android:name применяются наравне друг с другом.

В действие MainActivity не нужно вносить никаких изменений кода. Код в этом классе теперь быть выглядеть примерно так:

Запуск приложения

Теперь, когда весь код готов, запустите приложение на устройстве, чтобы увидеть его в работе.

В рамках части 2 этого пошагового руководства вы оптимизируете это приложение для устройств, работающих в альбомном режиме.

Источник

Fragments walkthrough – phone

This is the first part of a walkthrough that will create a Xamarin.Android app that targets an Android device in portrait orientation. This walkthrough will discuss how to create fragments in Xamarin.Android and how to add them to a sample.

The following classes will be created for this app:

  1. PlayQuoteFragment В This fragment will display a quote from a play by William Shakespeare. It will be hosted by PlayQuoteActivity .
  2. Shakespeare В This class will hold two hardcoded arrays as properties.
  3. TitlesFragment В This fragment will display a list of titles of plays that were written by William Shakespeare. It will be hosted by MainActivity .
  4. PlayQuoteActivity В TitlesFragment will start the PlayQuoteActivity in response to the user selecting a play in TitlesFragment .

1. Create the Android project

Create a new Xamarin.Android project called FragmentSample.

It is recommended to select Modern Development for this walkthrough.

After creating the project, rename the file layout/Main.axml to layout/activity_main.axml.

2. Add the data

The data for this application will be stored in two hardcoded string arrays that are properties of a class name Shakespeare :

  • Shakespeare.Titles В This array will hold a list of plays from William Shakespeare. This is the data source for the TitlesFragment .
  • Shakespeare.Dialogue В This array will hold a list of quotes from one of the plays contained in Shakespeare.Titles . This is the data source for the PlayQuoteFragment .

Add a new C# class to the FragmentSample project and name it Shakespeare.cs. Inside this file, create a new C# class called Shakespeare with the following contents

3. Create the PlayQuoteFragment

The PlayQuoteFragment is an Android fragment that will display a quote for a Shakespeare play that was selected by the user earlier on in the application, This fragment will not use an Android layout file; instead, it will dynamically create its user interface. Add a new Fragment class named PlayQuoteFragment to the project:

Then, change the code for the fragment to resemble this snippet:

It is a common pattern in Android apps to provide a factory method that will instantiate a fragment. This ensures that the fragment will be created with the necessary parameters for proper functioning. In this walkthrough, the app is expected to use the PlayQuoteFragment.NewInstance method to create a new fragment each time a quote is selected. The NewInstance method will take a single parameter – the index of the quote to display.

Читайте также:  Хранилище мультимедиа android жрет батарею

The OnCreateView method will be invoked by Android when it is time to render the fragment on the screen. It will return an Android View object that is the fragment. This fragment does not use a layout file to create a view. Instead, it will programmatically create the view by instantiating a TextView to hold the quote, and will display that widget in a ScrollView.

Fragment sub-classes must have a public default constructor that has no parameters.

4. Create the PlayQuoteActivity

Fragments must be hosted inside an Activity, so this app requires an Activity that will host the PlayQuoteFragment . The Activity will dynamically add the fragment to its layout at run-time. Add a new Activity to the application and name it PlayQuoteActivity :

Edit the code in PlayQuoteActivity :

When PlayQuoteActivity is created, it will instantiate a new PlayQuoteFragment and load that fragment in its root view in the context of a FragmentTransaction . Notice that this activity does not load an Android layout file for its user interface. Instead, a new PlayQuoteFragment is added to the root view of the application. The resource identifier Android.Resource.Id.Content is used to refer to the root view of an Activity without knowing its specific identifier.

5. Create TitlesFragment

The TitlesFragment will subclass a specialized fragment known as a ListFragment which encapsulates the logic for displaying a ListView in a fragment. A ListFragment exposes a ListAdapter property (used by the ListView to display its contents) and an event handler named OnListItemClick which allows the fragment to respond to clicks on a row that is displayed by the ListView .

To get started, add a new fragment to the project and name it TitlesFragment:

Edit the code inside the fragment:

When the Activity is created Android will invoke the OnCreate method of the fragment; this is where the list adapter for the ListView is created. The ShowQuoteFromPlay method will start an instance of the PlayQuoteActivity to display the quote for the selected play.

Display TitlesFragment in MainActivity

The final step is to display TitlesFragment within MainActivity . The Activity does not dynamically load the fragment. Instead the fragment will be statically loaded by declaring it in the layout file of the activity using a fragment element. The fragment to load is identified by setting the android:name attribute to the fragment class (including the namespace of the type). For example, to use the TitlesFragment , then android:name would be set to FragmentSample.TitlesFragment .

Edit the layout file activity_main.axml, replacing the existing XML with the following:

The class attribute is a valid substitute for android:name . There is no formal guidance on which form is preferred, there are many examples of code bases that will use class interchangeably with android:name .

There are no code changes required for MainActivity. The code in that class should be very similar to this snippet:

Run the app

Now that the code is complete, run the app on a device to see it in action.

Part 2 of this walkthrough will optimtize this application for devices running in landscape mode.

Источник

Оцените статью