How to always start from a startup activity on Android?

后端 未结 9 1319
走了就别回头了
走了就别回头了 2020-12-09 10:52

There are three different cases:

1) A user launches an app, navigates in it, pressed home and click on the app icon again to launch our app again.

2) A user

9条回答
  •  [愿得一人]
    2020-12-09 11:29

    It seems a similar question has already been asked. It sounds like the OP came up with a working solution. How do I collapse "child activities"?

    EDIT: Instead of using a button you can use a boolean to tell whether or not you need to collapse back to the main activity. Have your root activity extend from Activity and the child activities extend from CollapsableActivity. To get this to work in all cases I added startOutsideActivity() and startOutsideActivityForResult().

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    
    public class CollapsableActivity extends Activity {
        private boolean returnToRoot;
        public static final int COLLAPSE_BACK = -1; // something other than RESULT_CANEL (0)
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            returnToRoot = true;
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            returnToRoot = true;
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            // start collapsing the stack
            if (returnToRoot) {
                setResult(COLLAPSE_BACK);
    
                finish();
            }
        }
    
        @Override
        public void startActivityForResult(Intent intent, int requestCode) {
            super.startActivityForResult(intent, requestCode);
            returnToRoot = false;
        }
    
        public void startOutsideActivityForResult(Intent intent, int requestCode) {
            super.startActivityForResult(intent, requestCode);
            returnToRoot = true;
        }
    
        @Override
        public void startActivity(Intent intent) {
            // call startActivityForResult to make sure and catch the collapse condition
            super.startActivityForResult(intent, 0);   
            returnToRoot = false;
        }
    
        public void startOutsideActivity(Intent intent) {
            super.startActivity(intent);    
            returnToRoot = true;
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (resultCode == COLLAPSE_BACK) {
                returnToRoot = true;
            }
       }
    }
    

    This worked properly for me in all cases you listed. The only difference is you need to call startOutsideActivity() or startOutsideActivityForResult() when you navigate away from you app. Personally, I think this adds clarity to your intentions. Hope it helps!

提交回复
热议问题