2016-02-22 8 views
0

Я звоню recreate в onActivityResult из MainActivity, когда в настройках приложения внесены определенные изменения. После отдыха onResume не вызывается.onResume не вызван после воссоздания в действии

Я также получаю сообщение об ошибке:

E/ActivityThread: Performing pause of activity that is not resumed 

С this вопрос, я понял, что эта функция не может быть вызвана из onResume. Но я звоню им от onActivityResult. Также использование обработчика для вызова recreate решает проблему, но вызывает мигание, которое выглядит плохо для пользователя. Что может быть, возможно, неправильно здесь? Как я могу использовать recreate без Handler?

Любые идеи будут оценены. Благодаря!

+1

Поместите код, чтобы люди могли вам помочь. – Aksiom

+0

Что я должен здесь положить? Я думал, что проблема достаточно хорошо определена. –

+0

Поместите код OnActivityResult здесь – Aksiom

ответ

2

OnActivityResult() вызывается перед onResume(). Что вы можете сделать, это установить флаг в OnActivityResult(), который вы можете проверить в onResume(), и если флаг верен, вы можете воссоздать действие.

Что бы вы могли на самом деле сделать, это закончить деятельность и начать то же самое, isntead воссоздать ее. Вы получите тот же эффект. это может быть что-то вроде этого:

public class MainActivity extends AppCompatActivity { 

private boolean shouldRecreate = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.d("AG", "onCreate() called"); 
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivityForResult(intent, 0); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (shouldRecreate){ 
     finish(); 
     startActivity(new Intent(this, MainActivity.class)); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == 0){ 
     shouldRecreate = true; 
    } 
} 
} 
+0

Какой флаг я должен проверить? Не могли бы вы привести пример? –

+0

Сделайте свой собственный флаг, что-то вроде shouldRecreate (bool). В OnActivityResult() вы установите для параметра shouldRecreate значение true, если условие является тем, которое вы хотите. Затем в onResume вы проверяете shouldRecreate == true, если да, вы вызываете метод recreate. – Aksiom

+0

Я установил флаг в onActivityResult и проверил его в onResume. Ошибка все еще идет. –

0

я, наконец, решил проблему, отправив трансляцию из SettingsActivity в BroadcastReciever в MainActivity и вызывая recreate()onRecieve() внутри.

+0

Рад, что вы это исправили :) – Aksiom

 Смежные вопросы

  • Нет связанных вопросов^_^