1

アプリの設定で特定の変更が行われたときに、の電話recreateをしています。レクリエーションの後、呼び出されません。onActivityResultMainActivityonResume

私もエラーが発生しています:

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

この質問から、この関数は から呼び出せないことがわかりましたonResume。しかし、私は からそれらを呼び出していますonActivityResult。また、handler を使用して呼び出すとrecreate問題は解決しますが、まばたきが発生し、ユーザーには見栄えが悪くなります。ここで何が間違っている可能性がありますか?recreateなしでどのように使用できHandlerますか?

どんなアイデアでも大歓迎です。ありがとう!

4

2 に答える 2

3

OnActivityResult() は onResume() の前に呼び出されます。できることは、onActivityResult() にフラグを設定することです。フラグは onResume() で確認できます。フラグが true の場合は、アクティビティを再作成できます。

実際にできることは、アクティビティを再作成するのではなく、アクティビティを終了して同じアクティビティを開始することです。同じ効果が得られます。それは次のようなものかもしれません:

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;
    }
}
}
于 2016-02-22T21:14:11.327 に答える
0

から にブロードキャストを送信し、SettingsActivityBroadcastRecieverMainActivity呼び出すことrecreate()で、最終的に問題を解決しましたonRecieve()

于 2016-02-22T22:07:59.810 に答える