From 2af8b9c245fc7ee3ff21324482bb513c777f8e3f Mon Sep 17 00:00:00 2001 From: Igor Alekseev Date: Sun, 22 Dec 2024 01:49:27 +0300 Subject: [PATCH 1/3] DZ Fragments Alekseev Igor --- app/build.gradle | 8 ++-- app/src/main/AndroidManifest.xml | 10 +++++ .../otus/gpb/homework/fragments/ActivityA.kt | 16 ++++++++ .../otus/gpb/homework/fragments/ActivityB.kt | 26 ++++++++++++ .../otus/gpb/homework/fragments/FragmentA.kt | 34 +++++++++++++++ .../otus/gpb/homework/fragments/FragmentAA.kt | 21 ++++++++++ .../otus/gpb/homework/fragments/FragmentAB.kt | 13 ++++++ .../otus/gpb/homework/fragments/FragmentBA.kt | 41 +++++++++++++++++++ .../otus/gpb/homework/fragments/FragmentBB.kt | 41 +++++++++++++++++++ .../fragments/FragmentMainActivityA.kt | 20 +++++++++ .../gpb/homework/fragments/MainActivity.kt | 20 ++++++++- app/src/main/res/layout-land/activity_b.xml | 20 +++++++++ app/src/main/res/layout/activity_a.xml | 12 ++++++ app/src/main/res/layout/activity_b.xml | 17 ++++++++ app/src/main/res/layout/activity_main.xml | 30 +++++++++++++- app/src/main/res/layout/fragment_a.xml | 36 ++++++++++++++++ app/src/main/res/layout/fragment_aa.xml | 31 ++++++++++++++ app/src/main/res/layout/fragment_ab.xml | 20 +++++++++ app/src/main/res/layout/fragment_ba.xml | 31 ++++++++++++++ app/src/main/res/layout/fragment_bb.xml | 31 ++++++++++++++ .../res/layout/fragment_main_activity_a.xml | 36 ++++++++++++++++ app/src/main/res/values/strings.xml | 14 +++++++ 22 files changed, 520 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentBA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentMainActivityA.kt create mode 100644 app/src/main/res/layout-land/activity_b.xml create mode 100644 app/src/main/res/layout/activity_a.xml create mode 100644 app/src/main/res/layout/activity_b.xml create mode 100644 app/src/main/res/layout/fragment_a.xml create mode 100644 app/src/main/res/layout/fragment_aa.xml create mode 100644 app/src/main/res/layout/fragment_ab.xml create mode 100644 app/src/main/res/layout/fragment_ba.xml create mode 100644 app/src/main/res/layout/fragment_bb.xml create mode 100644 app/src/main/res/layout/fragment_main_activity_a.xml diff --git a/app/build.gradle b/app/build.gradle index c5cf1b8..4dda39e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,10 +3,6 @@ plugins { id 'org.jetbrains.kotlin.android' } -kotlin { - jvmToolchain(17) -} - android { compileSdk 34 namespace "otus.gpb.homework.fragments" @@ -34,6 +30,9 @@ android { kotlinOptions { jvmTarget = '17' } + buildFeatures { + viewBinding true + } } dependencies { @@ -42,6 +41,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.fragment:fragment-ktx:1.8.5' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9604b34..e17e9ba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,16 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt new file mode 100644 index 0000000..550b7a8 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt @@ -0,0 +1,16 @@ +package otus.gpb.homework.fragments + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity + +class ActivityA: AppCompatActivity(R.layout.activity_a) { + + @SuppressLint("ResourceType") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + supportFragmentManager.beginTransaction() + .add(R.id.containerActivityA, FragmentMainActivityA()) + .commit() + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt new file mode 100644 index 0000000..0990cf4 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt @@ -0,0 +1,26 @@ +package otus.gpb.homework.fragments + +import android.content.res.Configuration +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity + +class ActivityB: AppCompatActivity() { + + private val fragmentBA = FragmentBA() + private val fragmentBB = FragmentBB() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_b) + val fm = supportFragmentManager.beginTransaction() + fm.add(R.id.containerBA, fragmentBB) + fm.add(R.id.containerBB, fragmentBA) + if(resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { + fm.hide(fragmentBB) + } + fm.commit() + } + + fun getFragmentBA() = fragmentBA + fun getFragmentBB() = fragmentBB +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt new file mode 100644 index 0000000..900cd9f --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt @@ -0,0 +1,34 @@ +package otus.gpb.homework.fragments + +import android.content.Context +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.View +import android.widget.Button +import androidx.activity.OnBackPressedCallback + +class FragmentA : Fragment(R.layout.fragment_a) { + + override fun onAttach(context: Context) { + super.onAttach(context) + val backPressedCallBack = object : OnBackPressedCallback(true) + { + override fun handleOnBackPressed() { + if(parentFragmentManager.backStackEntryCount <= 1) + requireActivity().finish() + } + } + requireActivity().onBackPressedDispatcher.addCallback(this, backPressedCallBack) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val button = view.findViewById