0

Android で finish() 関数に問題があります。

私は次の動作を取得しようとしています: ユーザーが初めてアプリケーションを起動したときに、ウィザード手順を開始したいと考えています。さまざまなフラグメントで PageViewer を使用しています。ユーザーが最初のページにいるときに戻るボタンを押すと、アプリケーションが閉じます。

ここで私がしたこと:

メイン アクティビティでは、ユーザーがアプリケーションを初めて起動したかどうかを確認します。この場合、新しいアクティビティ(ウィザード)を開始します。

if(firstTime) {
    // here activity is the main activity
    Intent i = new Intent(activity, Wizard.class);
    activity.startActivityForResult(i,0);
}

ウィザード アクティビティ クラスで、onBackPressed メソッドをオーバーライドします。

@Override
public void onBackPressed(){
    if(pager.getCurrentItem() == 0) {
        setResult(5);
        finish();
    } else{
        // code
    }
}

finish() が呼び出されると、Android は親アクティビティ (メイン アクティビティ) の onActivityResult メソッドを呼び出します。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    if(resultCode == 5) {
        finish()
    } 
}

私が期待しているのは、アプリケーションが閉じられることです。私が得たのは、Android が onResume を呼び出し、次に onCreate メソッドを呼び出して、ウィザードを最初から開始することです。次に、この新しいウィザードからもう一度押すと、アプリケーションは期待どおりに閉じます。

助けてくれてありがとう!

4

1 に答える 1

0

finish();アプリケーション全体を終了する代わりに、これを試してください。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();

バックグラウンドであった以前のアクティビティが、コードによってフォアグラウンドになっている可能性があります。

それが役に立てば幸い。

于 2014-12-10T12:16:09.043 に答える