bottom navigation sets locale on startup and language change. Fixed a bug where the selected fragment changes when rotated.

This commit is contained in:
Bart
2021-01-06 12:21:31 +01:00
parent 6dd2f5de40
commit 1cf973da9b
3 changed files with 38 additions and 14 deletions

View File

@@ -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<Route> 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);
}
}

View File

@@ -0,0 +1,5 @@
package com.a1.nextlocation;
public interface Refreshable {
void refresh();
}

View File

@@ -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();
}
/**