【问题标题】:SingleTask Activity android + recreate that ActivitySingleTask Activity android +重新创建该Activity
【发布时间】:2016-06-20 15:00:57
【问题描述】:

有 2 个活动。 A 和 B。

第一个 Activity 是 A(它已经配置了一些来自 de Bundle of the Intent...

A -> B B->A(开始新的Activity,不是onBackPressed())。Activity A需要重新创建,Intent的Bundle已经改变。它也必须是 singleTask。

B 到 A 应该重新创建 A Activity,我不想使用 Activity A 的 onResume()。

编辑:就像whatsapp。 你在一个组->设置->信息组->成员点击->发送消息 它启动相同的活动(Chat Activity),但是当您返回时,群聊 Activity 不存在。

有什么想法吗?

【问题讨论】:

  • 你为什么首先使用 SingleTask?听起来这不是你想要的。
  • CLEAR_TOP 标志可能会有所帮助
  • @DeeV 因为我只需要 1 个“A”活动。
  • 用一个例子编辑
  • 如果 A 启动 B 的目的是让 B 改变 A 中的内容,使用 startActivityForResult,并处理 A 中 onActivityResult 中所做的事情。无需重新启动 A。

标签: android android-intent android-activity


【解决方案1】:

为此,请使用FLAG_ACTIVITY_CLEAR_TOP 和manifest launchMode 您的活动singleinstance

当从 B 出发时 --> A 使用 CLick

【讨论】:

  • 不,因为也许我用 onBackPressed 回去,一个活动会被杀死。
【解决方案2】:

我不确定我是否理解你的问题,但你可以使用onNewIntent:

如果您只想为从 B 开始时通过 bundle 传递的数据重新创建 Activity A,您可以覆盖 Activity A 的 onNewIntent 方法,获取 bundle 并执行您的工作。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    initLayout();
}

你的 onCreate 方法可以是这样的:

@Override
public void onCreate(Bundle icicle){
   super.onCreate(icicle);
   setContentView(R.id.your_layout);
   // find views;
   initLayout();
}

public void initLayout(){
    final Bundle bundle = getIntent().getExtras();
    if(bundle != null){
       // init layout
       // do other staff
    }
}

我认为这是处理您的问题的最佳方式。

祝你好运。

【讨论】:

  • 我在方法的onCreate中做了很多事情。我不认为这是最好的选择...
猜你喜欢
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 2022-10-19
相关资源
最近更新 更多