Как остановить refre sh активность android - PullRequest
0 голосов
/ 14 июля 2020
• 1000 Извините, что задаю вопрос еще раз, но я пытался работать над нашими предыдущими сообщениями, и у меня не получилось.

пример: когда это действие включено, оно открывается и закрывается каждый раз без остановки. но если я удалю этот метод get (); от onCreate все работает нормально.

мой код:

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);

    }

}

Ответы [ 2 ]

3 голосов
/ 14 июля 2020

Это то, что происходит в вашем Activity:

  1. при запуске Activity вызывается onCreate ()
  2. в onCreate () вы вызываете get ()
  3. в get () вы вызываете setLocale ()
  4. в setLocale () вы перезапускаете Activity с этими двумя строками:
    Intent refresh = new Intent(this, Arabic.class);
    startActivity(refresh);
при перезапуске Activity l oop снова начинается с 1.

Если вы удалите вызов get () из метода onCreate (), он сломает l oop . Вот почему в этом случае он работает нормально.

Можете ли вы удалить строки, которые перезапускают действие из метода setLocale (), или это нарушает что-то еще в вашем действии?

0 голосов
/ 14 июля 2020

В методе get (), который вы вызвали setLocale (), и в setLocale, вы обновляете действие без завершения finish(), поэтому каждый раз, когда вы вызываете setLocale или get (), действие будет обновляться sh.

Что вы можете сделать, так это обновить sh действие только тогда, когда пользователь изменит язык следующим образом:

findViewById(R.id.BTN_ar).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                setLocale("ar");
               //the correct way to refresh an activity
                finish();
                startActivity(getIntent());
               
            }
        });

И удалить это из setLocale ():

 Intent refresh = new Intent(this, Arabic.class);
 startActivity(refresh); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...