【问题标题】:Passing data from tabhost activity to its inner activity将数据从 tabhost 活动传递到其内部活动
【发布时间】:2011-05-20 18:11:23
【问题描述】:

我有一个选项卡活动,我的每个应用程序选项卡都打开相同的活动,比如说 SecondActivity。所以代码如下所示。

TabSpec firstTab = tabHost.newTabSpec("tid1");
 firstTab.setIndicator("First Tab Name").setContent(new Intent(this,SecondActivity..class));
 tabHost.addTab(firstTab);

 TabSpec secondTab = tabHost.newTabSpec("tid1");
 firstTab.setIndicator("Second Tab Name").setContent(new Intent(this,SecondActivity.class));
 tabHost.addTab(secondTab);

现在我想在每次调用 SecondActivity 活动时从我的选项卡活动中传递一些数据。所以我尝试了这种方式,但它似乎没有工作:

TabSpec firstTab = tabHost.newTabSpec("tid1");
  Intent intent = new Intent(this, SecondActivity.class);
  Bundle b1 = new Bundle();
  b1.putString("name","Something");

 firstTab.setIndicator("First Tab Name").setContent(intent);
 tabHost.addTab(firstTab);


 TabSpec secondTab = tabHost.newTabSpec("tid1");
  Intent intent = new Intent(this, SecondActivity.class);
  Bundle b2 = new Bundle();
  b2.putString("name","Something2");

secondTab.setIndicator("First Tab Name").setContent(intent);
 tabHost.addTab(SecondTab);

有没有人知道它是否应该以这种方式工作,或者是否可以以任何其他方式进行? 在其他世界中,我希望第二个活动知道按下了哪个选项卡

【问题讨论】:

  • 您尚未将捆绑包添加到意图中!
  • 什么不起作用?在结果活动中将数据输入还是输出?

标签: android android-widget


【解决方案1】:

你可以这样做,

TabSpec firstTab = tabHost.newTabSpec("tid1");
Intent intent = new Intent(this, SecondActivity.class);
intent.put("name", "Something1");

firstTab.setIndicator("First Tab Name").setContent(intent);
tabHost.addTab(firstTab);

在SecondActivity的onCreate方法中,你可以调用getIntent(),然后提取信息。

【讨论】:

  • 这正是我所使用的。实际上函数名称是 intent.putExtra("name1","value") 谢谢。
  • @George32x,不客气。如果他们有帮助,请不要忘记选择其中一个答案。
  • 这正是我想要的。我自己没有想到这个我觉得很愚蠢,但是哦,好吧。他们需要更新 Tabhost/tab 小部件以接受构造函数中的额外内容。或者添加一个额外的方法。我讨厌必须为每个选项卡使用不同的意图。我希望只有 1 个。但是,这将达到其目的
【解决方案2】:

我不确定我是否遵循您的要求,但可以将数据(各种类型)传递给构成 TabHost 选项卡的 Activity 类。例如,您可以查看此线程 (Android - creating a Generic TabHost, passing info using Bundle problem),该线程讨论了如何设置 TabHost,然后创建基于 Activity 的选项卡,并在需要时将数据传递给它们。

刚刚注意到来自 varuaa 的注释。是的,如果没有向 Intent 添加任何内容,捆绑包不会有任何好处。查看 intent.putExtra 以了解可以轻松添加的各种项目。我一直使用实现 Serializable 的类将数据传递到新的 Activity。

【讨论】:

  • 这可能跑题了,但是通过意图传递可序列化类是一个好习惯。我必须实现类似的东西,而整个网络上的人都不鼓励使用它,据说 Parcelable 是要走的路。
  • @varuaa,你是对的,这本身似乎就是一场辩论。从高层次上看,反对 Serializable 的论点是它比 Parcelable 慢。这个线程(stackoverflow.com/questions/5550670/…)似乎有一些很好的信息。我可能需要重新审视我的使用情况,看看 Parcelable 是否会更好。
猜你喜欢
  • 2016-07-26
  • 2011-02-11
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
相关资源
最近更新 更多