From 1cf973da9b61403fcd53535737fb55891993074b Mon Sep 17 00:00:00 2001 From: Bart Date: Wed, 6 Jan 2021 12:21:31 +0100 Subject: [PATCH 1/2] 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(); } /** From d018b834909f36969e56bfe23a9fa5a32371f331 Mon Sep 17 00:00:00 2001 From: Bart Date: Wed, 6 Jan 2021 14:04:37 +0100 Subject: [PATCH 2/2] added strings --- .../java/com/a1/nextlocation/fragments/SettingsFragment.java | 2 +- app/src/main/res/values-nl/strings.xml | 3 +++ app/src/main/res/values/strings.xml | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) 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 4abea2b..8639b2c 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java @@ -55,7 +55,7 @@ public class SettingsFragment extends Fragment { private void initializeLanguageDropdown(View view) { Spinner languageDropdown = view.findViewById(R.id.dropdown_menu_Settings); - String[] items = new String[]{"Nederlands", "Engels", "Chinees"}; + String[] items = new String[]{getResources().getString(R.string.Dutch), getResources().getString(R.string.English), getResources().getString(R.string.Chinese)}; ArrayAdapter arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_dropdown_item, items); languageDropdown.setAdapter(arrayAdapter); diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 893ffe7..f8405ae 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -20,4 +20,7 @@ activeren Klaar annuleren + Engels + Nederlands + Chinees \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1cfcd8d..b93c29e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,4 +18,7 @@ activate Done cancel + Dutch + English + Chinese \ No newline at end of file