اذهب إلى المحتوى

السؤال

نشر

اهلا ي اخوان

قمت بعمل كود لتمكين المستخدم من اختيار للغته المفضلة الكود شغال ولله الحمد وقمت باضافة له وهيا حفظ للغته المختاره حتى يتمكن بعد ايقاف التطبيق ورجوع له من جديد ان يستطيع اللغة التي اختارها والامر ناجح المشكلة الان الاكتفتي صاير يعمل تحديث باستمرار بدون توقف كل ما دخلت عليه ياليت اذا احد يعرف سبب المشكله يساعدنا بحلها

 

الكود المستخدم:

 

public class Arabic extends AppCompatActivity {
    Toolbar toolbar;
    SharedPreferences sharedPreferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.arabic);
        sharedPreferences=getSharedPreferences("mykedy",Context.MODE_PRIVATE);
        findViewById(R.id.BTN_ar).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                setLocale("ar");
            }
        });
        findViewById(R.id.BTN_en).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setLocale("en");
            }
        });

        toolbar = findViewById(R.id.toolbar);
        toolbar.setTitle(getResources().getString(R.string.app_name));
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(Arabic.this, MainActivity.class));
                finish();
            }
        });

       //

        get();
    }

    @SuppressWarnings("deprecation")
    public void setLocale(String lang) {

        Locale myLocale = new Locale(lang);
        DisplayMetrics dm = getResources().getDisplayMetrics();
        Configuration conf = getResources().getConfiguration();
        conf.locale = myLocale;
        getResources().updateConfiguration(conf, dm);
       Intent refresh = new Intent(this, Arabic.class);
      startActivity(refresh);
        SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = share.edit();
        edit.putString("LOCALE",lang);
        edit.commit();



    }
    public void get( ) {
        SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE);
       String lan = (share.getString("LOCALE",""));
       setLocale(lan);

    }

}

 

Recommended Posts

  • 1
نشر

  اعتقد أنه يجب عليك التحقق من activity  في ()onCreate اذا كان ال sharedPreference له القيمة  null أم لا 

اذا كانت null ستكون الشاشة هي شاشة اختيار اللغة و ان لم تكن ستكون الشاشة homescreen او أيا كان ما تريده. 

  • 0
نشر
  بتاريخ On 14‏/7‏/2020 at 19:02 قال Yomna Raouf:

  اعتقد أنه يجب عليك التحقق من activity  في ()onCreate اذا كان ال sharedPreference له القيمة  null أم لا 

اذا كانت null ستكون الشاشة هي شاشة اختيار اللغة و ان لم تكن ستكون الشاشة homescreen او أيا كان ما تريده. 

أظهر المزيد  

اهلا بيك 

المشكلة هنا على حسب اعتقادي ولكن كيف يمكن استبداله 

 Intent refresh = new Intent(this, Arabic.class);
      startActivity(refresh);

هو يعمل تحديث للاكتفي ويوصل ل sharedPreference ويرجع من دالة  ()onCreate لما يصير استدعاء ل ملف sharedPreference

  • 0
نشر
public void setLocale(String lang) {

myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
onConfigurationChanged(conf);
/*Intent refresh = new Intent(this, AndroidLocalize.class);
startActivity(refresh);*/
  }

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // refresh your views here
    lblLang.setText(R.string.langselection);
  super.onConfigurationChanged(newConfig);
// Checks the active language
if (newConfig.locale == Locale.ENGLISH) {
    Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
} else if (newConfig.locale == Locale.FRENCH){
    Toast.makeText(this, "French", Toast.LENGTH_SHORT).show();
}
  }

 declare in Manifest 

 android:configChanges="locale"

ماذا عن هذا ؟؟

أو يمكنك استبدال هذا الجزء 

Intent refresh = new Intent(activity, StartupActivity.class);
activity.startActivity(refresh);

بهذه ال method من activity class:

recreate();

 

  • 0
نشر
  بتاريخ On 14‏/7‏/2020 at 19:16 قال Yomna Raouf:
public void setLocale(String lang) {

myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
onConfigurationChanged(conf);
/*Intent refresh = new Intent(this, AndroidLocalize.class);
startActivity(refresh);*/
  }

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // refresh your views here
    lblLang.setText(R.string.langselection);
  super.onConfigurationChanged(newConfig);
// Checks the active language
if (newConfig.locale == Locale.ENGLISH) {
    Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
} else if (newConfig.locale == Locale.FRENCH){
    Toast.makeText(this, "French", Toast.LENGTH_SHORT).show();
}
  }

 declare in Manifest 

 android:configChanges="locale"

ماذا عن هذا ؟؟

أظهر المزيد  

ولكن الان لا يتم حفظ للغة التي تم اختيارها اختي ب هذا الطريقة

سابقا هو يحفظ الكود الذي عملت مشاركه له ولكن هو يعمل تحديث للاكتفتي في كل لحظة فقط

  • 0
نشر
  بتاريخ On 14‏/7‏/2020 at 19:02 قال Yomna Raouf:

  اعتقد أنه يجب عليك التحقق من activity  في ()onCreate اذا كان ال sharedPreference له القيمة  null أم لا 

اذا كانت null ستكون الشاشة هي شاشة اختيار اللغة و ان لم تكن ستكون الشاشة homescreen او أيا كان ما تريده. 

أظهر المزيد  

ما قصدته هنا هو استخدام جملة  if 

  بتاريخ On 14‏/7‏/2020 at 19:19 قال مروان مروان3:

ولكن الان لا يتم حفظ للغة التي تم اختيارها اختي ب هذا الطريقة

سابقا هو يحفظ الكود الذي عملت مشاركه له ولكن هو يعمل تحديث للاكتفتي في كل لحظة فقط

أظهر المزيد  

كلا الحلين سببا ذلك ؟؟

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...