2011-06-24 21 views
1

我有一個頁面視圖中的4個選項卡,當我點擊第一次在選項卡上它執行它oncreate()相應選項卡的方法,當我去其他選項卡上相同頁面,再次點擊上一個點擊標籤,然後其oncreate()方法不執行爲什麼?爲什麼它不工作,因爲按鈕點擊意味着每次我點擊其oncreate()方法運行。不能運行oncreate(),在同一頁的第二次選項卡更改

我的標籤活動類代碼如下

intent1 = new Intent().setClass(this, keywordxmlparsing.class); 
spec1 = tabHost.newTabSpec("Activity2").setIndicator("keyword/ search...").setContent(intent1); 
tabHost.addTab(spec1); 

intent2 = new Intent().setClass(this, filter.class); 
spec2 = tabHost.newTabSpec("Activity1").setIndicator("filter search").setContent(intent2); 
tabHost.addTab(spec2); 
intent3 = new Intent().setClass(this, OpeningToday.class); 
spec3 = tabHost.newTabSpec("Activity3").setIndicator("opening today").setContent(intent3); 
tabHost.addTab(spec3); 
intent4 = new Intent(keywordresulttab.this,Map.class); 
spec4 = tabHost.newTabSpec("Activity4").setIndicator("Map").setContent(intent4); 
tabHost.addTab(spec4); 

親愛的,如果我使用

@Override 
public void onTabChanged(String label) { 
    // TODO Auto-generated method stub 
    if(label == "Activity2") { 




    } 
    try{ 
    if(label == "Activity4") { 
     Intent intent4; 
     intent4 = new Intent(keywordresulttab.this,Map.class); 
     startActivity(intent4); 
     Log.i("suiuawhd","maps class"); 




       } 

那我可以去其他activity意味着使用

intent4 = new Intent(keywordresulttab.this,Map.class); 
      startActivity(intent4); 

我們可以在選項卡中單擊再次activity加載?那麼怎麼寫的地方,包含活動通過的ActivityGroup的手段來實現

 tabHost.addTab(spec3); 
intent4 = new Intent(keywordresulttab.this,Map.class); 
spec4 = tabHost.newTabSpec("Activity4").setIndicator("Map").setContent(intent4); 
tabHost.addTab(spec4); 

回答

3

標籤。當有人更改選項卡時,如果需要,僅創建相應的活動。當您第二次移動到任何選項卡時,該活動已存在且僅顯示其窗口。 您應該改用:

TabHost.setOnTabChangedListener(TabHost.OnTabChangeListener l) 

TabActivity有獨立的活動內容是有點棘手,所以也許你應該考慮使用瀏覽代替。如果沒有,你可以使用下面的代碼相互訪問的所有活動:

獲取內容的活動的情況下,從TabActivity:

TabActivity.getLocalActivityManager().getActivity(String name) 

其中name是newTabSpec給出()方法。

從內容活動得到TabActivity的實例:

FirstTab.getParent() 

使用這些方法,您可以創建的所有活動之間的通信(使用適當的鑄造)。例如:

public void onTabChanged(String label) { 

    if(label.equals("Activity2")) { 
     SecondActivity sa = (SecondActivity) getLocalActivityManager().getActivity(label); 
     sa.modifySomething(); 
    } 
} 

如果要更改標籤下的活動,你應該使用:

tabHost.clearAllTabs() 

,並再次創建所有TabSpecs。

+0

請描述你想達到與TabHost什麼。你想爲同一個選項卡啓動不同的活動還是改變現有的一些數據? – bart

+0

可以給你我的解決方案嗎?請你請求我的請求................ – SRam

0

在android oncreate()生命週期中,在活動的生命週期(如構造函數)中調用過一次,因爲當您再次按下該活動時,活動仍在活動並在內存中,因此它不會再次調用onCreate。

,所以你必須實現

TabHost.setOnTabChangedListener(TabHost.OnTabChangeListener l). 
+0

@ warrior假設ontabchange()我用來在變量中存儲一些值,現在在同一頁上我點擊在其他選項卡上,並希望在我的下一個選項卡類中的變量中使用先前的商店值,那麼如何運行它的oncreate()方法第二次顯示基於該值的結果? – SRam

+0

@saurabh當你點擊任何選項卡時,你就是在一個視圖組的tabhost中開始一個新的活動。所以你的答案在這個頁面中我如何在單個應用程序中的活動/服務之間傳遞數據?這是一個經常被問到的問題,請參考http://developer.android.com/resources/faq/framework.html獲取答案。 –

相關問題