2012-04-03 60 views
0

我有2個選項卡 - Tab1和Tab2,Tab1Activity和Tab2Activity。
我想要將值從Tab1Actvity傳遞給Tab2Activity但不想啓動Tab2Activity。 當我嘗試下面的代碼它給空值:如何在不啓動Activity的情況下將值傳遞給另一個選項卡?

在Tab1Activity

getParent().getIntent().putExtra("key", "value"); 

在Tab2Activity

String valueString=getParent().getIntent().getStringExtra("key"); 
System.out.println("Testing.....: "+valueString); 
+1

你爲什麼不使用靜態字段和getter和setter – ngesh 2012-04-03 11:01:02

+1

@sandy becouse這是錯的... – Selvin 2012-04-03 11:04:28

回答

5

我真的不鼓勵你通過擴展Application類來使用全局變量。如果您的應用程序進入後臺(例如,由於打電話),android系統可能會決定終止您的應用程序。通話結束後,您的應用程序和活動堆棧將被恢復,但您的活動狀態將會丟失。

我寧願建議您使用廣播將數據發送到其他活動。

在你Tab1Activity:

Intent dataIntent = new Intent(); 
dataIntent.setAction("com.your.app.DATA_BROADCAST"); 
dataIntent.putExtra("tag", "your data"); 
sendBroadcast(dataIntent); 

Tab2Activity:

BroadcastReceiver receiver = new BroadcastReceiver() {  
    @Override 
    public void onReceive(Context context, Intent intent) {  
    String yourData = intent.getStringExtra("tag"); 
    } 
}; 

IntentFilter filter = new IntentFilter(); 
filter.addAction("com.your.app.DATA_BROADCAST"); 
registerReceiver(receiver, filter); 
+0

這是什麼returnIntent? ? – captaindroid 2012-04-04 07:20:47

+0

我編輯了我的答案,請檢查 – timoschloesser 2012-04-04 08:59:47

+0

vry良好的解決方案..代碼爲我工作。 – 2014-02-20 07:24:34

1

你一定要使用活動標籤頁的內容重新考慮。更標準的方法是使用一個使用Tabs的Activity來僅在選擇特定選項卡時顯示部分佈局。

Android文檔有一個很好的工作示例,請查看Hello, TabWidget

替代

如果由於某種原因,你就需要使用活動,您可以通過添加值來臨時演員通過他們之間的信息在您使用打開每個活動的意圖捆綁,或通過擴展Application類。

通過擴展Application類(並將其實現爲Singleton),您將獲得一個對象,該對象在存在任何應用程序組件時都會存在,從而提供一個集中位置來存儲和傳輸應用程序組件之間的複雜對象數據。

1

此外,您可以使用靜態類或SharedPreferences在選項卡之間進行數據傳輸。 正確的方法是設置一個靜態字段到,在你的活動創建標籤

public class greformanews extends TabActivity { 

     public static String JorgesysTitle; 
... 
... 
... 

所以在標籤定義1

@Override 
protected void onPause() { 
    greformanews.JorgesysTitle = "JORGESYS =)"; 
super.onPause(); 
} 
在活動

在標籤中定義的活動2

//get value defined in Activity 1 !:) 
String Title = greformanews.JorgesysTitle 
相關問題