I want to change the language by pressing a button and choosing the language from the menu, But I am facing a problem which is that no change has occurred to the language note: 1-I have 2 string file for (en and ar languages). 2-I have options_menu.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/ar"
android:title="عربي"/>
<item android:id="@+id/en"
android:title="English"/>
</menu>
3-The Main_page.java contains:
public class main_page extends AppCompatActivity {
private TextView name_nav;
private AppBarConfiguration mAppBarConfiguration;
private StorageReference mStorageRef;
private String uid;
private ImageView user_img;
private long backPressedTime;
private Toast backToast;
private DrawerLayout drawer;
FirebaseStorage storage;
StorageReference storageReference;
Button menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_page);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mStorageRef = FirebaseStorage.getInstance().getReference();
storage = FirebaseStorage.getInstance();
storageReference = storage.getReference();
uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
R.id.nav_tools, R.id.nav_share, R.id.nav_send)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
View header = navigationView.getHeaderView(0);
name_nav = header.findViewById(R.id.name_nav);
user_img = header.findViewById(R.id.user_img_nav);
menu = header.findViewById(R.id.menu);
TextView logout = navigationView.findViewById(R.id.logout);
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseAuth.getInstance().signOut();
SharedPreferences.Editor pref = getSharedPreferences("Login", MODE_PRIVATE).edit();
pref.clear();
pref.commit();
Intent intent = new Intent(getApplicationContext(), PhoneLoginActivity.class);
startActivity(intent);
finish();
}
});
ToggleButton logou_btnt = navigationView.findViewById(R.id.logout_btn);
logou_btnt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseAuth.getInstance().signOut();
SharedPreferences.Editor pref = getSharedPreferences("Login", MODE_PRIVATE).edit();
pref.clear();
pref.commit();
Intent intent = new Intent(getApplicationContext(), PhoneLoginActivity.class);
startActivity(intent);
finish();
}
});
loadInformation();
registerForContextMenu(menu);
menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openContextMenu(view);
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.options_menu,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()){
case R.id.ar:
setLocale("ar");
case R.id.en:
setLocale("en");
default:
break;
}
return super.onContextItemSelected(item);
}
public void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
finish();
startActivity(refresh);
}
public void loadInformation() {
FirebaseDatabase.getInstance().getReference().child("Guest").child(uid)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
System.out.println("fullName" + dataSnapshot.child("img_id").getValue(String.class));
name_nav.setText(dataSnapshot.child("fullName").getValue(String.class));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
StorageReference storageRef = storage.getReference();
storageRef.child("images/"+uid).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
// Use the bytes to display the image
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
user_img.setImageBitmap(bmp);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
Toast.makeText(getApplicationContext(), "No Such file or Path found!!", Toast.LENGTH_LONG).show();
}
});
}
public void onBackPressed() {
if (backPressedTime + 2000 > System.currentTimeMillis()) {
backToast.cancel();
finishAffinity();
} else {
backToast = Toast.makeText(getApplicationContext(), R.string.press_agin, Toast.LENGTH_SHORT);
backToast.show();
}
backPressedTime = System.currentTimeMillis();
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}}
The result of run: the MainActivity still refresh without error.