0

i am working on voice recording application and its has many functionality, i want to add an imagebutton on the main page to change the language of the application.

when i try to run the application by using imagebutton and setOnClickListener() function to change the language i got this error :

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

i have no idea which view i have to pass to setOnClickListener() function

this is MainActivity class:

public class MainActivity extends AppCompatActivity {
private @NonNull ActivityMainBinding bottonvi;
private homeFragment homeFragment=new homeFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    bottonvi=ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(bottonvi.getRoot());
    reqFragment(new homeFragment());

    bottonvi.bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.nav_home:
                    reqFragment(new homeFragment());
                    return true;


                  case R.id.nav_addrec:
                        if (homeFragment.getIsRecording()) {

                            homeFragment.stopRecording();
                            homeFragment.recordBtn.setImageDrawable(getResources().getDrawable(R.drawable.record_logo, null));
                            homeFragment.setIsRecording(false);

                        }
                    reqFragment(new addrecFragment());
                    return true;

                case R.id.nav_history:
                    if (homeFragment.getIsRecording()) {

                        homeFragment.stopRecording();
                        homeFragment.recordBtn.setImageDrawable(getResources().getDrawable(R.drawable.record_logo, null));
                        homeFragment.setIsRecording(false);

                    }
                    reqFragment(new historyFragment());
                    return true;

                case R.id.nav_about:
                    if (homeFragment.getIsRecording()) {
                        homeFragment.stopRecording();
                        homeFragment.recordBtn.setImageDrawable(getResources().getDrawable(R.drawable.record_logo, null));
                        homeFragment.setIsRecording(false);

                    }
                    reqFragment(new about_fragment());
                    return true;

            }
            return false;
        }
    });

    ImageButton img = findViewById(R.id.EN);
    img.setOnClickListener(view -> {         
        LocaleHelper.setLocale(this,"en");
    });
}
private void reqFragment(Fragment fragment){
    FragmentManager fragmentManager =getSupportFragmentManager();
    FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.frameLayout,fragment);
    fragmentTransaction.commit();
}}

LocaleHelper class :

public class LocaleHelper {


private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";

public static void onCreate(Context context) {

    String lang;
    if(getLanguage(context).isEmpty()){
        lang = getPersistedData(context, Locale.getDefault().getLanguage());
    }else {
        lang = getLanguage(context);
    }

    setLocale(context, lang);
}

public static void onCreate(Context context, String defaultLanguage) {
    String lang = getPersistedData(context, defaultLanguage);
    setLocale(context, lang);
}

public static String getLanguage(Context context) {
    return getPersistedData(context, Locale.getDefault().getLanguage());
}

public static void setLocale(Context context, String language) {
    persist(context, language);
    updateResources(context, language);
}

private static String getPersistedData(Context context, String defaultLanguage) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(SELECTED_LANGUAGE, defaultLanguage);
}

private static void persist(Context context, String language) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = preferences.edit();

    editor.putString(SELECTED_LANGUAGE, language);
    editor.apply();
}

private static void updateResources(Context context, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);

    Resources resources = context.getResources();

    Configuration configuration = resources.getConfiguration();
    configuration.locale = locale;

    resources.updateConfiguration(configuration, resources.getDisplayMetrics());


}}

the application have many layouts , also i have created string.xml for the other language

salem
  • 1

0 Answers0