Android 将数据从一个选项卡活动拉到另一个选项卡活动

Android 将数据从一个选项卡活动拉到另一个选项卡活动,android,android-intent,android-tabhost,android-tabactivity,Android,Android Intent,Android Tabhost,Android Tabactivity,我所读到的关于意图的所有内容都谈到了如何使用意图来推送数据,或者从一个活动开始另一个活动。我想从已经运行的活动中提取数据 位于的选项卡布局教程演示了我要做的事情。(我的应用程序正在进行一些工程计算,但教程代码与我的应用程序有很好的相似性。)教程创建了一个包含三个选项卡的应用程序,每个选项卡承载一个单独的活动 要展开教程中的示例,假设我在“艺术家”选项卡/活动中选择了一位艺术家。我希望能够选择相册选项卡/活动,并让它显示该艺术家的所有相册 在我看来,我需要用一种意图来做这件事。我找到的所有教程都假

我所读到的关于意图的所有内容都谈到了如何使用意图来推送数据,或者从一个活动开始另一个活动。我想从已经运行的活动中提取数据

位于的选项卡布局教程演示了我要做的事情。(我的应用程序正在进行一些工程计算,但教程代码与我的应用程序有很好的相似性。)教程创建了一个包含三个选项卡的应用程序,每个选项卡承载一个单独的活动

要展开教程中的示例,假设我在“艺术家”选项卡/活动中选择了一位艺术家。我希望能够选择相册选项卡/活动,并让它显示该艺术家的所有相册

在我看来,我需要用一种意图来做这件事。我找到的所有教程都假设我将在“艺术家”选项卡/活动中创建一个“查看相册”按钮,按下该按钮将执行启动相册活动并传递artistName的意图

我不想创建那个按钮。艺术家版式上的不动产是宝贵的,我有一个非常好的相册选项卡,HelloTabWidget活动已经包含了创建相册选项卡的意图

此外,用户会希望在相册和艺术家之间来回跳转,以更改艺术家选择,而选项卡是一种非常好的方法。没有必要用另一个按钮使UI复杂化

那么,当选择了Albums选项卡(或显示Albums布局)时,如何让Albums活动从Artists活动中提取artistName,而不是让Artists活动启动Albums并推送artistName

我可以从其他编程领域想到的等价物:

  • 全局变量。在Android devt中感到沮丧,对吗?如果它们确实存在,它们叫什么

  • 一个getter,比如
    artistName=Artists.getArtistName()。我觉得这没那么容易

  • 写入和读取文件,即大容量存储器或非易失性存储器。我不需要artistName值是永久的。每次用户启动应用程序时,它都将重置为null


那么,在安卓世界,它是如何实现的呢?我是否使用意图?如果是,如何使用?

全局变量是正确的答案

我认为Java不鼓励它们的使用,但是这个窗口右边“相关”链接中出现的几个链接直接提到了它们。一个是,另一个是。两者都指出应用程序类是定义全局变量和方法的地方。有了这些新知识,我在Xoriant博客上找到了一篇文章,在StackOverflow answers上进行了扩展

最好先回顾一下这三个环节。我需要为那些作者所说的话添加一些提示

  • 您的应用程序类必须位于自己的单独文件中。(这对某些人来说可能是一个“duh”,但对每个人来说都不是。)下面是一个名为Something.java的示例的好框架:

    public class Something extends Application {
    
      // Put application wide (global) variables here
      // Constants are final, so they don't have to be private
      // But other variables should be declared private;
      //  use getters/setters to access them
      public final boolean FEET = false;
      public final boolean METERS = true;
      private boolean units = FEET;
    
      @Override
      public void onCreate() {
        super.onCreate();
        // Put any application wide (global) initialization here
      }
    
      // Put application wide (global) methods here
      public boolean getUnits() {
        return units;
      }
    
      public void setUnits(boolean whichOne) {
        units = whichOne;
      }
    }
    
  • 我正在WindowsXP中使用Eclipse和ADT插件。如果直接编辑XML代码,Eclipse的行为并不总是正常的,因此最好打开AndroidManifest.XML,然后选择应用程序选项卡并在名称字段中输入应用程序名称。你不需要在名字前面加点或句号。只需输入类的名称,比如“Globals”或“MyApplication”之类的。(请注意,这是清单中的默认应用程序。您不必创建单独的
    标记。

  • 在实际的Android设备上,这一步可能不是必需的,但对于模拟器来说却是必需的:您需要在每个
    onCreate()
    和每个将访问全局变量和方法的方法中使用
    getApplicationContext()
    命令。我试图将其置于
    onCreate()之外
    与我的活动范围内的其他变量一起使用,但它不起作用。将它放入每个方法中似乎是浪费,但emulator和Android设备都可以这样使用它。下面是一个示例,显示了我如何使用它:

    public void fooBar() {
      // Access to global variables and methods
      final Something s = (Something)getApplicationContext();
    
      // ...
      // This next line demonstrates both a global method and a global variable
      if (s.getUnits() == s.FEET) {
        // do something with feet
      } else {
        // do something with meters instead
      }
      // ...
    }
    
  • 这些是我遇到的唯一的问题。我列出的三个参考文献,加在一起,在其他方面都相当完整