【问题标题】:Activity inside TabHost not getting onNewIntentTabHost 中的活动没有获得 onNewIntent
【发布时间】:2014-09-28 17:30:49
【问题描述】:

如文档所述,如果该活动在清单中设置了 launchMode="singleTop",则意图将通过 onNewIntent 回调进入。

当活动由 TabHost 启动时,我无法获得此行为。不是调用 onNewIntent,而是调用 Activity 的 onCreate 方法,从而在 Activity 堆栈顶部生成一个新的 Activity 实例。

这是我启动意图的代码:

// create the TabHost that will contain the Tabs
            tabHost = (TabHost)findViewById(android.R.id.tabhost);


            TabSpec tab1 = tabHost.newTabSpec("First Tab");
            TabSpec tab2 = tabHost.newTabSpec("Second Tab");
            TabSpec tab3 = tabHost.newTabSpec("Third tab");

           // Set the Tab name and Activity
           // that will be opened when particular Tab will be selected
            tab1.setIndicator("Tab1");
            Intent intent = new Intent(this, WhenLogin.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
            tab1.setContent(intent);

还有其他人遇到过这个问题吗?如果有,他们找到解决办法了吗?

【问题讨论】:

  • “由TabHost 开始”是什么意思?
  • 我正在使用标签。当我不使用标签时一切正常。
  • 也许您可以考虑粘贴到您的源代码中来解释“由TabHost 开始”的意思。
  • 我编辑了我的代码,感谢重播。

标签: java android android-intent nfc


【解决方案1】:

TabActivity 以及将活动置于选项卡中的一般方法已被弃用超过 3.5 年。在此之前很长一段时间内,很多专家都在警告开发人员远离它。请使用现代选项卡解决方案,例如带有选项卡指示器的ViewPager,或FragmentTabHost,甚至使用Views 用于选项卡的普通TabHost

如文档所述,如果该活动在清单中设置了 launchMode="singleTop",则意图将通过 onNewIntent 回调进入。

这仅适用于通过 startActivity() 开始的活动(也许 startActivityForResult(),尽管将其与 singleTop 结合使用让我担心)。

调用 Activity 的 onCreate 方法而不是调用 onNewIntent,从而在 Activity 堆栈顶部生成一个新的 Activity 实例。

“活动的新实例”不在活动堆栈上,因为它没有用作成熟的活动。取而代之的是,UI 会从 Activity 中删除,并作为选项卡放入您的 TabActivity

【讨论】:

  • 好的,我明白了。但是我使用 nfc,这意味着我必须使用活动而不是片段。 (我需要“On New Intent”方法来获取 NFC TAG)。有没有办法在活动中使用标签?还是替换片段类中的 OnNewIntent 方法?非常感谢!
  • @user3421416:“但是我使用 nfc,这意味着我必须使用活动而不是片段”——您不仅必须使用活动,而且必须是真实的活动。该活动是否有标签(例如,通过ViewPager)并不重要,但它必须是一个真实的活动。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多