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

السؤال

نشر

اهلا ي اخوان

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

 

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

 

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
نشر
بتاريخ الآن قال 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
نشر
بتاريخ 2 دقائق مضت قال 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
نشر
بتاريخ 9 ساعات قال Yomna Raouf:

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

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

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

بتاريخ 9 ساعات قال مروان مروان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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...