代码之家  ›  专栏  ›  技术社区  ›  mahboub_mo

如何在关闭android中所有其他活动的同时保持活动的活力?

  •  -1
  • mahboub_mo  · 技术社区  · 7 年前

    我有一个主活动,其中包含一个抽屉,然后我有其他在上面打开的活动,它们也有抽屉菜单(它们继承了主活动)

    public class OBDActivity  extends MainActivity {
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LayoutInflater inflater = (LayoutInflater) this.getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
        View contentView = inflater.inflate(R.layout.activity_setting, null, false);
        mDrawer.addView(contentView, 0);
        getSupportActionBar().setTitle(R.string.OBDParams);
     }
     ...
    }
    

    Intent intent=new Intent(this, MessagesActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
    

    事实上,我想开始新的活动并完成当前的活动,要么是相同的活动,要么是不同的类型。

    4 回复  |  直到 7 年前
        1
  •  1
  •   David Wasser    7 年前

    你需要使用你的 MainActivity 作为“调度员”。当你想打开时 MessagesActivity

    Intent intent=new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_SINGLE_TOP);
    // Add an extra that specifies the name of the class that should be started by MainActivity
    intent.putExtra("startActivity", MessagesActivity.class.getName());
    startActivity(intent);
    

    这将清除活动堆栈,一直返回到您的现有实例 .

    现在,在 主要活动 推翻 onNewIntent() Activity :

    @Override
    protected void onNewIntent(Intent intent) {
        // Check if we should launch another Activity
        if (intent.hasExtra("startActivity") {
            // Start the desired Activity
            String activityName = intent.getStringExtra("startActivity");
            Intent dispatchIntent = new Intent(this, Class.forName(activityName));
            startActivity(dispatchIntent);
        }
    }
    

    这将启动所需的 活动 在上面 .

        2
  •  0
  •   ND1010_    7 年前

    Intent intent = new Intent(ActivityC.this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();
    

    了解更多信息 intent

        3
  •  0
  •   mahboub_mo    7 年前

    我唯一能做的就是处理关闭旧 activity 我自己留了一份 这是打开和关闭它时,一个新的将要打开。

    我创建了一个名为 oldActivity 在我的 Main Activity onCreate

     openedActivity = this;
    

    活动 将从抽屉菜单中打开我刚刚完成了旧菜单:

      oldActivity.finish();
    
        4
  •  0
  •   Zulqurnain Jutt    7 年前

    但有一个解决方法,您可以清除backstack中的所有活动,然后重新打开第一个活动。

    试试这个:

    Intent intents = new Intent(CurrentActivity.this, FirstActivity.class);
    intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TOP
                | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();