Рубрики
Без рубрики

Базовая реализация фрагмента с Android.

Вступление Эта серия будет посвящена основам разработки для Android…. С тегами android, java, новички, тристан.

  • Эта серия будет посвящена основам разработки для Android. Присоединяйтесь ко мне и давайте попробуем создать и понять некоторые интересные вещи.

Версия для YouTube

Версия YouTube поста в блоге.

Установка

  • Прежде чем приступить к этому уроку, у вас уже должна быть установлена Android studio и запущен новый проект. С этого момента я буду считать, что вы соответствуете этим критериям.

Создание фрагмента

  • Обычно вы бы пошли, файл -->новый -->фрагмент в Android studio, и именно так вы бы поступили в реальном мире. Тем не менее, мы собираемся разбить эти шаги и делать все по отдельности. Сейчас я опубликую код и расскажу нам о нем.
public class CrimeFragment extends Fragment {

}
  • Первое, что мы делаем, это файл-->создать-->класс . Имя класса может быть любым. Единственная причина, по которой имя класса – CrimeFragment, заключается в том, что я следую вместе с Android-программированием: guid ранчо большого ботаника и это соглашения об именовании, которые он использует. Книга немного устарела, но мы можем использовать официальную документацию Android |, чтобы дополнить то, чего не хватает для бронирования. Как вы можете видеть, фрагмент в Android – это просто обычный класс Java, который расширяет класс Fragment. Как мы знаем, ключевое слово

  • extend дает нам доступ ко всем открытым полям в классе фрагментов.

Создание модели

  • Прежде чем мы двинемся дальше, мы собираемся провести занятие под названием “Преступление”. Это будет содержать основную информацию, которая позже будет использована для создания нашего объекта преступления.
public class Crime {
    private UUID id;
    private String title;

    public Crime(){
        this.id = UUID.randomUUID();
    }

    public UUID getId(){
        return this.id;
    }
    public String getTitle(){
        return this.title;
    }
    public void setTitle(String title){
        this.title = title;
    }
}

  • Приведенный выше код довольно стандартный POJO (обычный старый объект Java), так что ничего особенного объяснять не нужно. Просто убедитесь, что этот класс находится в своем собственном файле java и что он находится в том же пакете, что и CrimeFragment .

Обновление фрагмента преступления

  • Далее мы собираемся обновить класс CrimeFragment, чтобы добавить некоторые новые переменные экземпляра и переопределить метод onCreate().
public class CrimeFragment extends Fragment {
    private Crime crime;
    private EditText titleField;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        this.crime = new Crime();
    }


}
  • Обратите внимание, что мы добавили две новые переменные экземпляра, одну для хранения нашего объекта Crime, а другую для хранения объекта под названием titleField. Возможно, вам интересно узнать о типе EditText, мы поговорим об этом позже. Затем мы добавляем @Override , мы добавляем это, чтобы указать компилятору, что мы переопределяем метод (он уведомит нас, если метод не существует). Это не обязательно, но считается лучшей практикой при переопределении унаследованных методов.

Что является преобладающим?

  • Хорошее переопределение – это способность подкласса (любого класса слева от ключевого слова extends) переопределять метод, унаследованный от суперкласса (любого класса справа от ключевого слова extends). Мы делаем это, потому что у суперкласса есть метод, в котором его поведение “достаточно близко”, а затем мы изменяем его поведение в соответствии с нашими потребностями. Возможно, вы также видели, как используется ключевое слово super. супер позволяет нам получить доступ к методу суперкласса onCreate(), что означает, что метод все еще вызывается.

Создание XML-файлов

  • Если вы незнакомы, фрагменты не существуют сами по себе, они на самом деле существуют внутри действий или другого фрагмента. Поэтому нам нужно создать место внутри мероприятий, это будет сделано с помощью макета рамки.


    



  • Это делается внутри основного файла activity.XML. Вы можете думать о XML-файлах как о HTML-файлах разработки Android. Первое, что вы, вероятно, заметили, это то, что мы определили Компоновку ограничений для хранения описания фрейма.

Что такое макет?

  • Макет определяет структуру пользовательского интерфейса в нашем приложении. Все элементы в макете построены с использованием иерархии объектов View и ViewGroup. Представление – это то, что пользователь может видеть и взаимодействовать с ним, как с кнопкой. Группа просмотра – это просто невидимый контейнер, который определяет структуру макета для представлений и других объектов группы просмотра.

Что такое Компоновка ограничений?

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

Что такое FrameLayout?

  • Описание рамки предназначено для блокирования области на экране для отображения одного элемента. Для хранения одного дочернего представления следует использовать фреймовое представление. Это то, что будет содержать наш фрагмент.

  • Описание фрейма, которое мы разместили в нашей основной деятельности, будет нашей основной средой для нашего фрагмента. Также убедитесь, что вы заметили android:id="@+id/фрагмент_контейнера" , вот как мы определяем идентификатор в Android, и мы будем использовать его для доступа к этому макету позже.

Создание фрагмента

  • Теперь, когда мы создали место для нашего фрагмента, теперь мы можем создать ваш XML-файл фрагмента. Этот файл будет служить шаблоном для того, как будет выглядеть наш фрагмент. Убедитесь, что вы создали этот файл в папке res/layout, затем перейдите файл ->создать ->файл ресурсов макета. Определите его имя и убедитесь, что корневой элемент является LinearLayout. После этого нажмите “ОК”, и у вас будет правильный XML-файл ресурсов


    



  • Линейный макет – это обычный макет, но он дает нам возможность определять ориентацию представлений внутри него с помощью android:ориентация="вертикальная" . Это означает, что все элементы должны располагаться вертикально. EditText – это представление, которое предоставляет нам пользовательский интерфейс для ввода и изменения текста. Обратите внимание, что мы определили android:id="@+id/crime_title" , который мы будем использовать позже. Мы также определили android:inputType="текст" , который мы используем, чтобы сказать, что это представление редактируемого текста принимает только ввод текста.

Раздувание фрагмента

public class CrimeFragment extends Fragment {
     private Crime mCrime;

     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          mCrime = new Crime();
}
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     Bundle savedInstanceState) {
          View v = inflater.inflate(R.layout.fragment_crime,           
          container, false);
               return v;
     }
}

  • Как вы можете видеть, мы обновляем фрагмент преступления, добавляя метод onCreateView(). Метод onCreateView() очень важен, потому что это метод, который вызывается для расширения (создания) представления, а затем возвращает это представление в действие хоста. Звездой этого раздела является метод inflate().

Что такое метод надувания?

Подключение представления редактируемого текста

public class CrimeFragment extends Fragment {
       private Crime crime;
       private EditText titleField;

       @Override
       public View onCreateView(LayoutInflater inflater, ViewGroup               
          container,Bundle savedInstanceState) {
              View v = inflater.inflate(R.layout.fragment_crime,               
              container, false);
              titleField =        
              (EditText)v.findViewById(R.id.crime_title);
       titleField.addTextChangedListener(new TextWatcher() {
              @Override
              public void beforeTextChanged(
              CharSequence s, int start, int count, int after) {
             // This space intentionally left blank
              }
              @Override
              public void onTextChanged(
              CharSequence s, int start, int before, int count) {
                      crime.setTitle(s.toString());
              }
              @Override
              public void afterTextChanged(Editable s) {
              // This one too
              }
          });
      return v;
     }
}

  • Первое, что вы должны заметить, это то, что мы добавили новый ссылочный тип, и этот тип – EditText .

Что такое редактируемый текст?

  • EditText – это элемент пользовательского интерфейса для ввода и изменения текста. Затем мы получаем ссылку на редактируемый текст и присваиваем ее переменной поля заголовка поле заголовка = (редакТируЕмЫй текст)v.findViewById(R.id.crime_title) . Идентификатор findViewById позволяет нам находить наше представление (которое является редактируемым текстом) по его идентификатору, который является crime_title .

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

  • Таким образом, EditText использует TextWatcher для отслеживания любых внесенных изменений, и когда мы добавляем TextWatcher с помощью метода addTextChangedListener, мы должны реализовать 3 метода. ** 1. Перед тем, как изменить , **2. Текст изменен ** и ** 3. После изменения текста . Как следует из названий методов, они вызываются до изменения текста, после изменения текста и во время изменения текста. Из этих 3 методов только один, который нас волнует, – это onTextChanged. В любое время, когда будет обнаружено изменение текста, мы будем обновлять заголовок нашего преступления с помощью crime.setTitle(s.toString()); . Мы должны использовать toString(), потому что, если мы этого не сделаем, то же самое останется последовательностью символов. Кроме того, s – это то, что содержит изменяемые символы.

Добавление фрагментов в менеджер фрагментов

  • Первый шаг в этом разделе – перейти к вашей основной деятельности и скопировать код.
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_container);

        if(fragment == null){
            fragment = new CrimeFragment();
            fm.beginTransaction()
                    .add(R.id.fragment_container,fragment)
                    .commit();
        }
    }
}
  • В этом разделе кода первое, что мы делаем, это получаем экземпляр activities FragmentManager(FM) с помощью getSupportFragmentManager(); . Этот метод просто возвращает FM для взаимодействия с фрагментами, связанными с этим действием. Затем мы пытаемся найти фрагмент с помощью findFragmentById(R.id.fragment_container) изначально при запуске он не найдет фрагмент, поэтому он будет равен нулю. Затем мы нажимаем условное, если наш фрагмент равен нулю (при запуске это так), поэтому мы создаем новый объект CrimeFragment с помощью new CrimeFragment(); . Затем мы начинаем транзакцию на FM …подождите, что такое транзакция ?

Что такое Транзакция?

  • Во время выполнения aFM может добавлять, удалять, заменять и выполнять другие действия с фрагментами в ответ на действия пользователя, и каждое из этих действий называется транзакцией. Чтобы начать транзакцию, мы вызываем beginTransaction() это позволяет FM узнать, что транзакция вот-вот состоится. Основой этой транзакции является метод add(). Мы предоставляем этому методу контейнер фрагментов, куда он будет отправлен, а также предоставляем ему фактический фрагмент. Затем он добавит фрагмент в FM. Наконец, мы закрываем транзакцию с помощью метода .commit().

Группа просмотра

Макеты

Компоновка рамки

Фрагментные Транзакции

НаблЮдатель за текстом

Переопределение

Используя супер

  • Спасибо, что нашли время в свой день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, прокомментируйте ниже или свяжитесь со мной по Твиттер .
  • Также не забудьте проверить мой канал YouTube для получения дополнительных учебных пособий по программированию.

Оригинал: “https://dev.to/theplebdev/basic-fragment-setup-with-android-8l8”