【问题标题】:How to close all activity如何关闭所有活动
【发布时间】:2017-07-27 06:35:57
【问题描述】:

Login_page>>home_page>>search_account>>delete_account

然后我删除一个帐户,我想去login_page。我的意思是在没有login_page 的情况下关闭所有活动的实际代码是什么?

这是我的代码,但不起作用。

AlertDialog.Builder builder = new AlertDialog.Builder(delete_class.this);
    builder.setTitle("Delete");
    builder.setMessage("Do you want to delete your account ??");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String id = MainActivity.return_id();
            Firebase firebase = new Firebase("user");
            firebase.child(id).removeValue();
            finish();
            Toast.makeText(delete_class.this,"Account deleted successfully",Toast.LENGTH_LONG).show();
        }
    });
    builder.setNegativeButton("No",null);
    AlertDialog alertDialog = builder.create();
    alertDialog.show();

【问题讨论】:

标签: android android-activity activity-finish


【解决方案1】:

使用此方法打开登录活动,它将杀死后台堆栈中的所有其他活动

public static void GoToActivityAsNewTask(Activity context, Class<?> clazz) {
        Intent intent = new Intent(context, clazz);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
        context.finish();

    }

通话会像

GoToActivityAsNewTask(this, LoginActivity.class);

希望这能解决您的问题

【讨论】:

    【解决方案2】:

    在意图中使用CLEAR_TOP 标志。它将解决您的问题。

    Intent intent = new Intent(this, LoginActivity.class);   
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
    

    【讨论】:

      【解决方案3】:

      您只需使用 CLEAR_TOP 标志启动登录活动。

      Intent intent = new Intent(this, LoginActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      

      通过这样做,所有先前的活动将被关闭,只有 LoginActivity 将在堆栈上。

      【讨论】:

        【解决方案4】:

        你可以试试这个。

        // Add activity
        public static void addActivities(String actName, Activity _activity) {
            if (Config.screenStack == null)
                Config.screenStack = new HashMap<String, Activity>();
            if (_activity != null)
                Config.screenStack.put(actName, _activity);
        }
        
        // Remove Activity
        public static void removeActivity(String key) {
            if (Config.screenStack != null && Config.screenStack.size() > 0) {
                Activity _activity = Config.screenStack.get(key);
                if (_activity != null) {
                    Config.screenStack.remove(key);
                    _activity.finish();
                }
            }
        }
        
        // Close all activities or screens
        public static void closeAllScreens()
        {
           if (Config.screenStack != null && Config.screenStack.size() > 0)
           {
               for (int i = 0; i < Config.screenStack.size(); i++)
               {
                  Activity activity = Config.screenStack.get(i);
                  if (activity != null)
                  {
                    Config.screenStack.remove(key);
                    activity.finish();
                  }
               }
            }
        }
        

        用户在 setContentView 之前添加活动以添加到堆栈中。

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addActivities("DemoActivity", DemoActivity.this)
            setContentView(R.layout.activity_create_feed_post);
        }
        

        更多信息可以参考this

        【讨论】:

          【解决方案5】:

          使用这个方法:

              public static void finishAll(Context context)
          {
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                  ((Activity) context).finishAffinity();
              }
              else
              {
                  ((Activity) context).finish();
                          }
          }
          

          希望对你有帮助!

          【讨论】:

            【解决方案6】:

            您可能应该使用activity.startActivityForResult()。请务必查看有关此主题的 Android docs

            【讨论】:

            • startActivityForResult 用于启动Activity 并从中获取结果。由于他想启动一个新的 LoginActivity 并清除所有以前的 Activity 堆栈,因此他无法获得任何结果。
            • 如果链中的每个Activity在完成某个动作后返回一个结果,这样整个链就可以清理干净了。因此,在活动结果上,您检查下一个活动的操作是否完成(例如删除某些内容),然后您就知道可以关闭当前活动了。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多