From b4fe30358b1d8535b0dd08600f261ee51ea9c083 Mon Sep 17 00:00:00 2001 From: s1ngle0f Date: Mon, 5 Aug 2024 00:09:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 63 +++++++++++++++++++ app/build.gradle.kts | 11 ++++ app/src/main/AndroidManifest.xml | 11 +++- .../java/ru/myitschool/work/FirstFragment.kt | 29 +++++++++ .../java/ru/myitschool/work/MainActivity.kt | 15 +++++ .../java/ru/myitschool/work/SecondFragment.kt | 17 +++++ .../java/ru/myitschool/work/ThirdFragment.kt | 26 ++++++++ app/src/main/res/layout/activity_main.xml | 12 ++++ app/src/main/res/layout/fragment_first.xml | 31 +++++++++ app/src/main/res/layout/fragment_second.xml | 14 +++++ app/src/main/res/layout/fragment_third.xml | 26 ++++++++ app/src/main/res/navigation/nav_graph.xml | 29 +++++++++ app/src/main/res/values/strings.xml | 1 + .../main/res/xml/data_extraction_rules.xml | 2 +- build.gradle.kts | 1 + 15 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 README.md create mode 100644 app/src/main/java/ru/myitschool/work/FirstFragment.kt create mode 100644 app/src/main/java/ru/myitschool/work/MainActivity.kt create mode 100644 app/src/main/java/ru/myitschool/work/SecondFragment.kt create mode 100644 app/src/main/java/ru/myitschool/work/ThirdFragment.kt create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/fragment_first.xml create mode 100644 app/src/main/res/layout/fragment_second.xml create mode 100644 app/src/main/res/layout/fragment_third.xml create mode 100644 app/src/main/res/navigation/nav_graph.xml diff --git a/README.md b/README.md new file mode 100644 index 0000000..3ea5449 --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +[![Android Studio version](https://img.shields.io/endpoint?url=https%3A%2F%2Fsicampus.ru%2Fgitea%2Fcore%2Fdocs%2Fraw%2Fbranch%2Fmain%2Fandroid-studio-label.json)](https://sicampus.ru/gitea/core/docs/src/branch/main/how-upload-project.md) + +# Практическая работа. Курс Kotlin. Практическая 3.8 +Данная практическая работа направлена на реализацию переходов между фрагментами + +## Дополнение XML разметки +Первым делом необходимо дополнить разметку XML для корректного использования ссылок внутри Kotlin кода. Необходимые места для заполнения представлены ниже. + +Реализовать фрагмент для навигации внутри файла *activity_main.xml*. Фрагмент должен растягиваться по родительскому объекту, иметь уникальный идентификатор `@+id/nav_host_fragment` и обозначить параметр navGraph равный `nav_graph` +```xml + + + + + + +``` + +Создать переход из третьего фрагмента в первый с уникальным идентификатором `@+id/action_thirdFragment_to_firstFragment` внутри файла *nav_graph.xml* +```xml +... + + + +... +``` + +## Дополнение Kotlin кода +Далее необходимо написать дополнить код для взаимодействия с кнопками для перехода + +FirstFragment.kt +```kotlin +... +override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val fromFirstToSecond: Button = view.findViewById(R.id.fromFirstToSecond) + val fromFirstToThird: Button = view.findViewById(R.id.fromFirstToThird) + + // TODO: Создать переход при клике на кнопку с первого на второй фрагмент. Подробнее смотреть в файле навигации! + + // TODO: Создать переход при клике на кнопку с первого на третий фрагмент. Подробнее смотреть в файле навигации! +} +``` + +ThirdFragment.kt +```kotlin +... +override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val fromThirdToFirst: Button = view.findViewById(R.id.fromThirdToFirst) + + // TODO: Создать переход при клике на кнопку с третьего на первый фрагмент. Подробнее смотреть в файле навигации! +} +``` \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0ab9e22..6b6eb8b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + id("org.jetbrains.kotlin.android") androidApplication } @@ -24,8 +25,18 @@ android { sourceCompatibility = Version.Kotlin.javaSource targetCompatibility = Version.Kotlin.javaSource } + kotlinOptions { + jvmTarget = "17" + } } dependencies { + implementation("androidx.appcompat:appcompat:1.7.0") + implementation("com.google.android.material:material:1.12.0") + implementation("androidx.activity:activity:1.9.1") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("androidx.navigation:navigation-fragment-ktx:2.7.7") + implementation("androidx.navigation:navigation-ui-ktx:2.7.7") + implementation("androidx.core:core-ktx:1.13.1") defaultLibrary() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9ee5c40..4162890 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,7 +10,14 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.Default" - tools:targetApi="31" /> + android:theme="@style/Theme.Design.Light.NoActionBar" + tools:targetApi="31"> + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/FirstFragment.kt b/app/src/main/java/ru/myitschool/work/FirstFragment.kt new file mode 100644 index 0000000..47fdbd6 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/FirstFragment.kt @@ -0,0 +1,29 @@ +package ru.myitschool.work + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.navigation.fragment.findNavController + +class FirstFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_first, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val fromFirstToSecond: Button = view.findViewById(R.id.fromFirstToSecond) + val fromFirstToThird: Button = view.findViewById(R.id.fromFirstToThird) + + // TODO: Создать переход при клике на кнопку с первого на второй фрагмент. Подробнее смотреть в файле навигации! + + // TODO: Создать переход при клике на кнопку с первого на третий фрагмент. Подробнее смотреть в файле навигации! + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/MainActivity.kt b/app/src/main/java/ru/myitschool/work/MainActivity.kt new file mode 100644 index 0000000..a38b32e --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/MainActivity.kt @@ -0,0 +1,15 @@ +package ru.myitschool.work + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_main) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/SecondFragment.kt b/app/src/main/java/ru/myitschool/work/SecondFragment.kt new file mode 100644 index 0000000..b21ed02 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/SecondFragment.kt @@ -0,0 +1,17 @@ +package ru.myitschool.work + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +class SecondFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_second, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ThirdFragment.kt b/app/src/main/java/ru/myitschool/work/ThirdFragment.kt new file mode 100644 index 0000000..c1a9cac --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ThirdFragment.kt @@ -0,0 +1,26 @@ +package ru.myitschool.work + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.navigation.fragment.findNavController + +class ThirdFragment : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_third, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val fromThirdToFirst: Button = view.findViewById(R.id.fromThirdToFirst) + + // TODO: Создать переход при клике на кнопку с третьего на первый фрагмент. Подробнее смотреть в файле навигации! + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..b8fe79e --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml new file mode 100644 index 0000000..4b575a5 --- /dev/null +++ b/app/src/main/res/layout/fragment_first.xml @@ -0,0 +1,31 @@ + + + + + + +