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 @@ + + + + + + +