There is setLocale method in MainActivity.class.
public void setLocale(String selected) {
Locale locale = new Locale( selected );
Locale.setDefault( locale );
Configuration config = new Configuration( );
config.setLocale( locale );
getBaseContext().getResources().updateConfiguration( config, getBaseContext().getResources().getDisplayMetrics() );
SharedPreferences.Editor editor = getSharedPreferences( "LanguageSetting", MODE_PRIVATE ).edit();
editor.putString( "MyLanguage", selected );
editor.apply();
}
I want to call this method above in a Fragment below.
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final String[] languageItems = {"English", "Polish"};
mainActivity = new MainActivity();
switch (parent.getItemAtPosition( position ).toString()){
case "Language":
new AlertDialog.Builder( getContext() ).setTitle( R.string.nav_bottom_dialog )
.setSingleChoiceItems( languageItems, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (languageItems[which]){
case "English" :
mainActivity.setLocale( "en" );
mainActivity.recreate();
break;
case "Polish" :
mainActivity.setLocale( "pl" );
mainActivity.recreate();
break;
}
dialog.dismiss();
}
} ).show();
It works when I have setLocale method and run it in MainActivity. I don't know why it doesn't work when I call the method in a Fragment showing NullPointerException Error like below.
There is no any error shown in Android Studio, does anyone know why??
E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.language.languageapp, PID: 16894
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:118)
at org.techtown.techApp.MainActivity.setLocale(MainActivity.java:134)
at org.techtown.techApp.ui.fragment.Fragment01$1.onClick(Fragment01.java:74)
MainActivity.java:134 => getBaseContext().getResources().updateConfiguration( config, getBaseContext().getResources().getDisplayMetrics() );
Fragment01.java:74 => mainActivity.setLocale( "en" );