From 5a514a389aa5c28285d8569c6a4b0fc4f65aaebd Mon Sep 17 00:00:00 2001 From: CDaut Date: Sat, 26 Mar 2022 21:59:51 +0100 Subject: [PATCH] changed weird activity switching to smooth fragment switching --- ClimateGoApp/app/src/main/AndroidManifest.xml | 11 -- .../activities/ActivityUtils.java | 44 -------- .../activities/DebugActivity.java | 103 ------------------ .../climategoapp/activities/HomeActivity.java | 37 ++++++- .../src/main/res/layout/activity_debug.xml | 37 ------- .../app/src/main/res/layout/activity_home.xml | 6 +- .../app/src/main/res/navigation/nav_graph.xml | 8 +- 7 files changed, 43 insertions(+), 203 deletions(-) delete mode 100644 ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java delete mode 100644 ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java delete mode 100644 ClimateGoApp/app/src/main/res/layout/activity_debug.xml diff --git a/ClimateGoApp/app/src/main/AndroidManifest.xml b/ClimateGoApp/app/src/main/AndroidManifest.xml index 4555de0..059c05a 100644 --- a/ClimateGoApp/app/src/main/AndroidManifest.xml +++ b/ClimateGoApp/app/src/main/AndroidManifest.xml @@ -16,17 +16,6 @@ - - - - - - - diff --git a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java deleted file mode 100644 index 63beadf..0000000 --- a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.cdaut.climategoapp.activities; - -import android.content.Intent; -import android.view.MenuItem; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.drawerlayout.widget.DrawerLayout; - -import de.cdaut.climategoapp.R; - -public final class ActivityUtils { - private ActivityUtils() { - throw new IllegalAccessError("Utility Class"); - } - - public static boolean handleNavBarItemClicks(@NonNull MenuItem item, - AppCompatActivity rootClass, - DrawerLayout drawer) { - - Class targetActivityClass; - - switch (item.getItemId()) { - case R.id.nav_main: - targetActivityClass = HomeActivity.class; - break; - case R.id.nav_debug: - targetActivityClass = DebugActivity.class; - break; - default: - throw new IllegalAccessError("Illegal activity met in nav drawer"); - } - - if (targetActivityClass.equals(rootClass.getClass())) { - drawer.closeDrawers(); - return false; - } - - Intent targetIntent = new Intent(rootClass, targetActivityClass); - rootClass.startActivity(targetIntent); - - return false; - } -} diff --git a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java deleted file mode 100644 index fe92282..0000000 --- a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java +++ /dev/null @@ -1,103 +0,0 @@ -package de.cdaut.climategoapp.activities; - -import android.content.Intent; -import android.os.Bundle; - - -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.app.AppCompatActivity; - -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.navigation.NavController; -import androidx.navigation.Navigation; -import androidx.navigation.ui.AppBarConfiguration; -import androidx.navigation.ui.NavigationUI; - -import de.cdaut.climategoapp.R; -import de.cdaut.climategoapp.databinding.ActivityDebugBinding; - -import android.view.Menu; -import android.view.MenuItem; - -import com.google.android.material.navigation.NavigationView; - -public class DebugActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { - - private AppBarConfiguration appBarConfiguration; - private ActivityDebugBinding binding; - public DrawerLayout drawerLayout; - public ActionBarDrawerToggle actionBarDrawerToggle; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - binding = ActivityDebugBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - setSupportActionBar(binding.toolbar); - - - // drawer layout instance to toggle the menu icon to open - // drawer and back button to close drawer - drawerLayout = findViewById(R.id.debug_drawer_layout); - actionBarDrawerToggle = new ActionBarDrawerToggle(this, - drawerLayout, - R.string.nav_open, - R.string.nav_close); - - // pass the Open and Close toggle for the drawer layout listener - // to toggle the button - drawerLayout.addDrawerListener(actionBarDrawerToggle); - actionBarDrawerToggle.syncState(); - - // to make the Navigation drawer icon always appear on the action bar - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - setNavigationViewListener(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - if (actionBarDrawerToggle.onOptionsItemSelected(item)) { - return true; - } - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - @Override - public boolean onSupportNavigateUp() { - NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_nav); - return NavigationUI.navigateUp(navController, appBarConfiguration) - || super.onSupportNavigateUp(); - } - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - return ActivityUtils.handleNavBarItemClicks(item, this, drawerLayout); - } - - private void setNavigationViewListener() { - NavigationView navigationView = findViewById(R.id.nav_drawer); - navigationView.setNavigationItemSelectedListener(this); - } -} \ No newline at end of file diff --git a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java index ebeadd4..89dac34 100644 --- a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java +++ b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java @@ -1,6 +1,5 @@ package de.cdaut.climategoapp.activities; -import android.content.Intent; import android.os.Bundle; @@ -9,11 +8,14 @@ import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AppCompatActivity; import androidx.drawerlayout.widget.DrawerLayout; +import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; +import de.cdaut.climategoapp.DebugFragment; +import de.cdaut.climategoapp.HomeFragment; import de.cdaut.climategoapp.R; import de.cdaut.climategoapp.databinding.ActivityHomeBinding; @@ -52,7 +54,13 @@ public class HomeActivity extends AppCompatActivity implements NavigationView.On actionBarDrawerToggle.syncState(); // to make the Navigation drawer icon always appear on the action bar - getSupportActionBar(). setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + //add the Home Fragment to the Fragment container + this.getSupportFragmentManager() + .beginTransaction() + .replace(R.id.home_act_fragment_container, new HomeFragment()) + .commit(); setNavigationViewListener(); } @@ -93,7 +101,30 @@ public class HomeActivity extends AppCompatActivity implements NavigationView.On @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { - return ActivityUtils.handleNavBarItemClicks(item, this, drawerLayout); + + Fragment targetFragment; + + //determine which fragment to switch to + switch (item.getItemId()) { + case R.id.nav_main: + targetFragment = new HomeFragment(); + break; + case R.id.nav_debug: + targetFragment = new DebugFragment(); + break; + default: + throw new IllegalAccessError("Illegal activity met in nav drawer"); + } + + //switch to the appropriate Fragment + this.getSupportFragmentManager() + .beginTransaction() + .replace(R.id.home_act_fragment_container, targetFragment) + .commit(); + + //close the nav drawer after switching fragments + this.drawerLayout.closeDrawers(); + return false; } private void setNavigationViewListener() { diff --git a/ClimateGoApp/app/src/main/res/layout/activity_debug.xml b/ClimateGoApp/app/src/main/res/layout/activity_debug.xml deleted file mode 100644 index fd9e1af..0000000 --- a/ClimateGoApp/app/src/main/res/layout/activity_debug.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ClimateGoApp/app/src/main/res/layout/activity_home.xml b/ClimateGoApp/app/src/main/res/layout/activity_home.xml index 1b84f38..f0951c6 100644 --- a/ClimateGoApp/app/src/main/res/layout/activity_home.xml +++ b/ClimateGoApp/app/src/main/res/layout/activity_home.xml @@ -21,7 +21,11 @@ android:background="?attr/colorPrimary" app:popupTheme="@style/Theme.ClimateGoApp.PopupOverlay" /> - + +