0

我讀過的有關Intents的所有內容都講述瞭如何使用它們來推送數據,或者從另一個活動開始一個活動。我想從已運行的活動中提取數據。將數據從一個選項卡活動拉到另一個選項

標籤版式教程http://developer.android.com/resources/tutorials/views/hello-tabwidget.html說明了我想要做的事情。 (我的應用程序正在進行一些工程計算,但教程代碼爲我的應用程序提供了一個很好的類比。)本教程創建了一個包含三個選項卡的應用程序,並且每個選項卡都託管一個單獨的活動。

要擴展本教程中的示例,假設我在「藝術家」選項卡/活動中選擇了一位藝術家。我希望能夠選擇相冊選項卡/活動並讓它顯示所有以該藝術家爲特色的相冊。

在我看來,我需要使用意圖來做到這一點。我找到的所有教程都假設我將在「藝術家」選項卡/活動中創建一個「查看專輯」按鈕,並且按下該按鈕將執行一個用於啓動相冊活動並傳遞artistName的Intent。

我不想創建那個按鈕。藝術家版面上的房地產是寶貴的,我有一個完美的專輯標籤,並且HelloTabWidget活動已經包含了創建專輯標籤的意圖。

此外,用戶會希望在專輯和藝術家之間跳來跳去,以改變藝術家的選擇,而這些標籤是完成此操作的絕佳方式。沒有必要使用另一個按鈕來複雜化UI。

因此,如果選擇「相冊」選項卡(或顯示「相冊」佈局),而不是讓藝術家活動START專輯並按PUSH artistName,我如何從藝術家活動中獲得相冊活動PULL artistName?

等效我可以從其他編程領域的想到:

  • 全局變量。在Android設備上不鼓勵,對吧?如果他們確實存在,他們叫什麼?

  • 一個吸氣劑,如artistName = Artists.getArtistName();。我覺得這並不容易。

  • 寫入和讀取文件 - 即大容量存儲器或非易失性存儲器。我不需要artistName值是永久的。每次用戶啓動應用程序時,它都會被重置爲空。

那麼它是如何在Android世界中完成的呢?我是否使用意圖 - 如果是,如何?

回答

0

全局變量是正確的答案。

我以爲Java不鼓勵它們的使用,但在窗口右邊的「相關」鏈接中出現的幾個鏈接直接提及它們。一個是"Android: How to declare global variables?",另一個是"how to pass value betweeen two tab in android"。都指向應用程序類作爲定義全局變量和方法的地方。有了這些新知識,我在Xoriant博客上發現了一篇名爲"Android Application Class"的文章,其中擴展了StackOverflow答案。

最好先查看這三個鏈接。我需要爲這些作者所說的添加一些提示。

  1. 您的應用程序類必須在它自己的單獨文件中。 (這可能是一個「咄」的一些人,但不是所有人。)下面是名爲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; 
        } 
    } 
    
  2. 我使用Eclipse與ADT插件,在Windows XP中。如果您直接編輯XML代碼,Eclipse並不總是行爲正常,所以最好打開AndroidManifest.xml,然後選擇應用程序選項卡並在名稱字段中輸入您的應用程序名稱。您不需要在名稱前面加上點或句點。只需輸入你的班級名稱,比如「Globals」或「MyApplication」或其他。 (請注意,這是在你的清單中的默認應用程序。您不必創建一個單獨的<application></application>標籤。 excerpt from Eclipse's Manifest edit page

  3. 這一步可能沒有必要一個實際的Android設備上,但仿真器是必要的:您需要在每個onCreate()中使用getApplicationContext()命令以及將訪問全局變量和方法的每種方法。我試圖將其放在onCreate()之外,其餘的活動都是廣泛變量,並且它不起作用。在每種方法中似乎都是浪費,但是仿真器和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 
        } 
        // ... 
    } 
    

這些是我遇到的唯一的打嗝。我列出的三個參考文獻都是相當完整的。

相關問題