<MyRusakov.ru />

Программирование на C++ с Нуля до Гуру

Программирование на C++ с Нуля до Гуру

Данный курс научит Вас программировать на языке C++, который, несмотря на свой почтенный возраст, необычайно сильно востребован. Курс состоит из 6 разделов, посмотрев которые и выполнив все упражнения, Вы с нуля освоите этот язык и сможете создавать самые разные проекты любой сложности на C++.

Для закрепления материала из уроков к ним идёт множество упражнений.

Дополнительно к курсу идёт вспомогательная система, которая не даст Вам забросить начатое на полпути.

Также вместе с курсов Вы получаете Бонус "Программирование на C++ в Unreal Engine", в котором Вы научитесь создавать игры на C++ с использованием этого движка.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Android приложение для показа новостей из RSS. Часть 2

Android приложение для показа новостей из RSS. Часть 2

Доброго времени суток! В прошлой статье мы рассмотрели базовые компоненты создаваемого Android приложения, а в этой рассмотрим уже непосредственно код приложения.

Итак, код большинства Android приложений начинается с класса под названием MainActivity - главное окно приложения (хотя класс этот можно назвать и по-другому, главное, чтобы он имел соответствующие атрибуты в файле манифеста). Каждому окну (активити в терминологии Android) соответствует свой файл макета. Макет - это xml-разметка окна, сильно напоминающая html-код стандартной web-страницы, и файлу MainActivity соответствует макет activity_main.xml в папке src/main/res/layout.

Класс MainActivity, расположенный в папке src/main/java/ru.myrusakov.rssapp загружает этот макет, который затем показывается пользователю.

Давайте посмотрим на файл MainActivity:


package ru.myrusakov.rssapp

import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import ru.myrusakov.rssapp.network.ApiClient
import ru.myrusakov.rssapp.data.RSSChannel

// главный класс приложения
class MainActivity : AppCompatActivity() {

    // выводит список элементов
    private lateinit var recyclerView: RecyclerView

    // ссылка на rss-ленту - она в формате xml
    private var rssURL = "https://career.habr.com/vacancies/rss?currency=RUR&sort=relevance&type=all"

    // основной метод любой активити, в которой загружается и устанавливается макет
    // а также выполняются другие действия
    override fun onCreate(savedInstanceState: Bundle?) {
        // вызываем метод родительского класса
        super.onCreate(savedInstanceState)
        // устанавливаем макет
        setContentView(R.layout.activity_main)

        // получаем ссылку на xml-элемент для вывода списков
        recyclerView = findViewById(R.id.recyclerView);
        // устанавливаем сетку из одного (1) элемента - можете поменять на 2 или на 3
        recyclerView.layoutManager = GridLayoutManager(this, 1)

        // загружаем данные по ссылке и отображаем в интерфейсе
        getFeed(rssURL)
    }


    private fun getFeed(channelUrl: String) {

        // получаем ссылку на сервис, которые загружает данные из Интернета
        val api = ApiClient.apiService

        // асинхронная загрузка
        api.getRssFeed(channelUrl).enqueue(object : Callback<RSSChannel> {

            // обработчик в случае ошибки
            override fun onFailure(call: Call<RSSChannel>, t: Throwable) {

            }

            // обработчик при успешной загрузке
            override fun onResponse(call: Call<RSSChannel>, response: Response<RSSChannel>)
            {
                // если тело ответа непустое
                if(response.body() != null) 
                {
                    // отображаем данные в интерфейсе через специально созданный адаптер
                    recyclerView.adapter =
                        FeedItemsRecyclerAdapter(baseContext, response.body().item)
                    //adapter.notifyDataSetChanged()
                }
                else
                {
                    Toast.makeText(baseContext, "Что-то пошло не так, попробуйте позже :(", Toast.LENGTH_SHORT).show();
                }
            }
        })
    }


}

Теперь рассмотрим файл разметки - activity_main.xml

Каждый файл разметки должен содержать один единственный корневой xml-элемент (тэг) - *Layout. У каждого элемента есть как минимум 2 атрибута, которые отвечают за то, как элемент будет располагаться и отображаться в интерфейсе.

Рассмотрим некоторые из них:

  1. android:layout_width="match_parent" и android:layout_height="match_parent" - отвечают за то, сколько пространства будет занимать элемент на экране - в нашем случае - все доступное пространство родительского элемента

  2. android:layout_marginStart="8dp android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" - внешние отступы элемента - отображаются также как и margin в html

  3. android:scrollbars="horizontal" - добавляется горизонтальная прокрутка, если элемент не помещается на экран.

4.app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - определяют положение всего элемента на макете как положение сторон элемента относительно сторон родительского элемента (но не только).

  1. androidx.recyclerview.widget.RecyclerView - отображает список элементов


<?xml version="1.0" encoding="utf-8"?>
<!-- 
    Корневой элемент - специальный

-->
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--
        Элемент в котором будет отображаться список,
        заполняет все пространство родительского элемента.
        Добавляются небольшие отступы (margins) с каждой из сторон.
    -->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:scrollbars="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:listitem="@layout/recyclerview_item" />

</androidx.constraintlayout.widget.ConstraintLayout>

Таким образом, сегодня мы с Вами рассмотрели еще один кусочек нашего Android приложения для чтения RSS-каналов. А в следующих статьях мы рассмотрим остальные его части, в том числе и веб-сервис на PHP, который будет отвечать за преобразование RSS-XML в JSON.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.