From 1799798eab34c9aa834c973b10b22a00e7b603cb Mon Sep 17 00:00:00 2001 From: Ekaterina Leonidova Date: Sat, 4 Jan 2025 19:56:18 +0300 Subject: [PATCH] Homework 11 Fragments --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 6 ++ .../otus/gpb/homework/fragments/ActivityA.kt | 20 +++++ .../otus/gpb/homework/fragments/ActivityB.kt | 31 ++++++++ .../otus/gpb/homework/fragments/FragmentA.kt | 48 ++++++++++++ .../otus/gpb/homework/fragments/FragmentAA.kt | 76 +++++++++++++++++++ .../otus/gpb/homework/fragments/FragmentAB.kt | 53 +++++++++++++ .../otus/gpb/homework/fragments/FragmentBA.kt | 37 +++++++++ .../otus/gpb/homework/fragments/FragmentBB.kt | 38 ++++++++++ .../gpb/homework/fragments/MainActivity.kt | 10 +++ app/src/main/res/layout-port/activity_b.xml | 16 ++++ app/src/main/res/layout-port/fragment_b_a.xml | 28 +++++++ app/src/main/res/layout/activity_a.xml | 11 +++ app/src/main/res/layout/activity_b.xml | 26 +++++++ app/src/main/res/layout/activity_main.xml | 24 +++++- app/src/main/res/layout/fragment_a.xml | 33 ++++++++ app/src/main/res/layout/fragment_a_a.xml | 32 ++++++++ app/src/main/res/layout/fragment_a_b.xml | 15 ++++ app/src/main/res/layout/fragment_b_a.xml | 16 ++++ app/src/main/res/layout/fragment_b_b.xml | 27 +++++++ app/src/main/res/values-night/themes.xml | 2 +- app/src/main/res/values/strings.xml | 12 +++ app/src/main/res/values/themes.xml | 2 +- build.gradle | 4 +- 24 files changed, 563 insertions(+), 5 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/res/layout-port/activity_b.xml create mode 100644 app/src/main/res/layout-port/fragment_b_a.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_a_a.xml create mode 100644 app/src/main/res/layout/fragment_a_b.xml create mode 100644 app/src/main/res/layout/fragment_b_a.xml create mode 100644 app/src/main/res/layout/fragment_b_b.xml diff --git a/app/build.gradle b/app/build.gradle index c5cf1b8..ec84345 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,6 +42,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.activity:activity:1.9.3' 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..46bc072 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,12 @@ android:supportsRtl="true" android:theme="@style/Theme.Fragments" tools:targetApi="31"> + + 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..1bcc69f --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt @@ -0,0 +1,20 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity + +class ActivityA : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_a) + + if (savedInstanceState == null) { + supportFragmentManager.beginTransaction() + .replace(R.id.fragmentA, FragmentA()) + .addToBackStack(null) + .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..dedfa79 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt @@ -0,0 +1,31 @@ +package otus.gpb.homework.fragments + +import android.content.res.Configuration.ORIENTATION_PORTRAIT +import android.os.Bundle +import android.util.Log +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity + + +class ActivityB : AppCompatActivity() { + var fragmentBA = FragmentBA() + var fragmentBB = FragmentBB() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_b) + + val transaction = + supportFragmentManager.beginTransaction().replace(R.id.fragmentBA, fragmentBA) + .replace(R.id.fragmentBB, fragmentBB) + val orientation = resources.configuration.orientation + + Log.d("TAG", orientation.toString()) + Log.d("TAG", (orientation == ORIENTATION_PORTRAIT).toString()) + + if (orientation == ORIENTATION_PORTRAIT) { + transaction.hide(fragmentBB) + } + transaction.commit() + } +} \ 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..380df5c --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt @@ -0,0 +1,48 @@ +package otus.gpb.homework.fragments + +import android.content.Context +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.activity.OnBackPressedCallback + +class FragmentA : Fragment() { + + override fun onAttach(context: Context) { + super.onAttach(context) + + val callback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (childFragmentManager.backStackEntryCount > 0) { + childFragmentManager.popBackStack() + } else { + isEnabled = false + activity?.finish() + } + } + } + requireActivity().onBackPressedDispatcher.addCallback(this, callback) + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_a, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + view.findViewById