From cceaa971659924cb18c15984b0a82bd1bd3d0902 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 21 Oct 2020 21:50:53 +0200 Subject: [PATCH] added first fragment. App keeps crashing when button in first fragment is clicked --- .idea/vcs.xml | 1 + app/build.gradle | 1 + .../com/ploedige/fragments/Fragment1.java | 50 +++++++++++++++++++ .../com/ploedige/fragments/Fragment2.java | 25 ++++++++++ .../com/ploedige/fragments/MainActivity.java | 23 ++++++++- app/src/main/res/layout/activity_main.xml | 11 +--- app/src/main/res/layout/fragment_1.xml | 34 +++++++++++++ app/src/main/res/layout/fragment_2.xml | 14 ++++++ app/src/main/res/values/strings.xml | 2 + 9 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/ploedige/fragments/Fragment1.java create mode 100644 app/src/main/java/com/ploedige/fragments/Fragment2.java create mode 100644 app/src/main/res/layout/fragment_1.xml create mode 100644 app/src/main/res/layout/fragment_2.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 4f1091a..6b5eef9 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,7 @@ + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 37f2583..112ff0c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,6 +33,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.2' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/app/src/main/java/com/ploedige/fragments/Fragment1.java b/app/src/main/java/com/ploedige/fragments/Fragment1.java new file mode 100644 index 0000000..d95137f --- /dev/null +++ b/app/src/main/java/com/ploedige/fragments/Fragment1.java @@ -0,0 +1,50 @@ +package com.ploedige.fragments; + +import android.app.Activity; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class Fragment1 extends Fragment { + + Fragment1Listener buttonCallback; + + public interface Fragment1Listener{ + public void onFragment1ButtonClick(); + } + + public Fragment1() { + // Required empty public constructor + } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_1, container, false); + } + + @Override + public void onAttach(@NonNull Activity activity) { + super.onAttach(activity); + try{ + buttonCallback = (Fragment1Listener) activity; + } + catch (ClassCastException e){ + throw new ClassCastException(activity.toString() + "must implement Fragment1Listener"); + } + } + + public void jumpToFragment2(View view){ + buttonCallback.onFragment1ButtonClick(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ploedige/fragments/Fragment2.java b/app/src/main/java/com/ploedige/fragments/Fragment2.java new file mode 100644 index 0000000..db6b301 --- /dev/null +++ b/app/src/main/java/com/ploedige/fragments/Fragment2.java @@ -0,0 +1,25 @@ +package com.ploedige.fragments; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +public class Fragment2 extends Fragment { + public Fragment2() { + // Required empty public constructor + } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_2, container, false); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ploedige/fragments/MainActivity.java b/app/src/main/java/com/ploedige/fragments/MainActivity.java index 7a0b074..d1d0748 100644 --- a/app/src/main/java/com/ploedige/fragments/MainActivity.java +++ b/app/src/main/java/com/ploedige/fragments/MainActivity.java @@ -1,14 +1,35 @@ package com.ploedige.fragments; import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentTransaction; import android.os.Bundle; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends FragmentActivity implements Fragment1.Fragment1Listener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + loadFirstFragment(); + } + + private void loadFirstFragment(){ + if(findViewById(R.id.fracment_container) != null){ + Fragment1 fragment1 = new Fragment1(); + getSupportFragmentManager().beginTransaction() + .add(R.id.fracment_container,fragment1).commit(); + } + } + + @Override + public void onFragment1ButtonClick() { + Fragment2 fragment2 = new Fragment2(); + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + + fragmentTransaction.replace(R.id.fracment_container,fragment2); + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); } } \ 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 index 4fc2444..4bb7b86 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,9 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_1.xml b/app/src/main/res/layout/fragment_1.xml new file mode 100644 index 0000000..07ff2b3 --- /dev/null +++ b/app/src/main/res/layout/fragment_1.xml @@ -0,0 +1,34 @@ + + + + + + + +