From 1cf973da9b61403fcd53535737fb55891993074b Mon Sep 17 00:00:00 2001 From: Bart Date: Wed, 6 Jan 2021 12:21:31 +0100 Subject: [PATCH] bottom navigation sets locale on startup and language change. Fixed a bug where the selected fragment changes when rotated. --- .../com/a1/nextlocation/MainActivity.java | 25 +++++++++++++------ .../java/com/a1/nextlocation/Refreshable.java | 5 ++++ .../fragments/SettingsFragment.java | 22 ++++++++++------ 3 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/com/a1/nextlocation/Refreshable.java diff --git a/app/src/main/java/com/a1/nextlocation/MainActivity.java b/app/src/main/java/com/a1/nextlocation/MainActivity.java index 91268f0..29d0ad1 100644 --- a/app/src/main/java/com/a1/nextlocation/MainActivity.java +++ b/app/src/main/java/com/a1/nextlocation/MainActivity.java @@ -30,8 +30,9 @@ import java.io.File; import java.util.Arrays; import java.util.Locale; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements Refreshable{ private static final String TAG = MainActivity.class.getName(); + private BottomNavigationView bottomNav; /** * onCreate method that creates the main activity @@ -40,12 +41,12 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + setLocale(loadLocale()); setContentView(R.layout.activity_main); - - BottomNavigationView bottomNav = findViewById(R.id.navbar); + bottomNav = findViewById(R.id.navbar); bottomNav.setOnNavigationItemSelectedListener(navListener); - /*System.out.println(Arrays.toString(getFilesDir().listFiles())); FileIO fileIO = new FileIO<>(); fileIO.writeFileData(new Route("TERSTSET"), getApplicationContext()); @@ -59,9 +60,9 @@ public class MainActivity extends AppCompatActivity { RouteListManager.INSTANCE.load(); // initialize saved language from sharedPreferences - setLocale(loadLocale()); - - getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, new HomeFragment()).commit(); + if (savedInstanceState == null) { + getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, new HomeFragment()).commit(); + } } /** @@ -107,4 +108,14 @@ public class MainActivity extends AppCompatActivity { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, selectedFragment).commit(); return true; }; + + /** + * refreshes bottom navigation + */ + @Override + public void refresh() { + bottomNav.getMenu().clear(); + bottomNav.inflateMenu(R.menu.navmenu); + bottomNav.setSelectedItemId(R.id.settings); + } } \ No newline at end of file diff --git a/app/src/main/java/com/a1/nextlocation/Refreshable.java b/app/src/main/java/com/a1/nextlocation/Refreshable.java new file mode 100644 index 0000000..9e416c8 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/Refreshable.java @@ -0,0 +1,5 @@ +package com.a1.nextlocation; + +public interface Refreshable { + void refresh(); +} diff --git a/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java index 9c0f42b..4abea2b 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java @@ -19,13 +19,23 @@ import android.widget.Spinner; import com.a1.nextlocation.MainActivity; import com.a1.nextlocation.R; +import com.a1.nextlocation.Refreshable; + +import org.jetbrains.annotations.NotNull; import java.util.Locale; public class SettingsFragment extends Fragment { private SharedPreferences.Editor editor; - + private Refreshable refreshable; + + @Override + public void onAttach(@NotNull Context context) { + super.onAttach(context); + refreshable = (Refreshable) context; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -57,15 +67,11 @@ public class SettingsFragment extends Fragment { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { setLocale(dropdownPositionToLanguage(id)); + // refresh fragment on language change if (id != previousID) { - Fragment currentFragment = getActivity().getSupportFragmentManager().findFragmentById(R.id.fragment_layout); - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.detach(currentFragment); - fragmentTransaction.attach(currentFragment); - fragmentTransaction.commit(); + refresh(); } } - @Override public void onNothingSelected(AdapterView parent) { } @@ -115,6 +121,8 @@ public class SettingsFragment extends Fragment { fragmentTransaction.detach(currentFragment); fragmentTransaction.attach(currentFragment); fragmentTransaction.commit(); + + refreshable.refresh(); } /**