2010-10-06 52 views
19

以下情況: 我有TabActivity與例如三個選項卡,TabA,TabB,TabC。Android。如何更改標籤內的活動

TabC的活動(Act_C_1)中有一個按鈕。所以如果用戶點擊該按鈕,另一個活動(Act_C_2)應該出現在TabC中。

我在此先感謝您的任何建議/意見。

穆爾

UPD:

這裏是我的代碼

TabActivity有三個活動:

public class TabScreen extends TabActivity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.tab_menu); 

     TabHost tabHost = getTabHost(); // The activity TabHost 
     TabHost.TabSpec spec; // Resusable TabSpec for each tab 
     Intent intent; // Reusable Intent for each tab 

     intent = new Intent().setClass(this, SecondActivity.class); 

     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, ThirdActivity.class); 
     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, FourthActivity.class); 
     spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent); 
     tabHost.addTab(spec); 
    } 

} 

活動 'Act_C_1' 或FourthActivity.java:

public class FourthActivity extends Activity implements OnClickListener 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fourth); 

     Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter); 
     BtnWeiter.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) 
    {      
     // I also tried to use LocalActivityManager 
     // TabActivity parentTabActivity = (TabActivity) getParent();    
     // LocalActivityManager manager = parentTabActivity.getLocalActivityManager(); 
     // manager.destroyActivity("tab_3", true); 
     // manager.startActivity("tab_3", new Intent(this, FourthActivity.class)); 
     finish(); 
     startActivity(new Intent(this, FourthActivity.class));    
    }   
} 
+1

請檢查此鏈接:[安卓:如何擁有TabActivity的一個選項卡下的多個活動(http://gamma-point.com/content/android-how-have-multiple-activities-under -single-tab-tabactivity) – Ian 2011-11-25 04:47:30

回答

-2

處理按鈕的onClick事件

finish()活動 添加startActivity方法以啓動另一個活動。

感謝

+0

不錯的建議,但TabActivity不起作用......至少我是這樣的。 – Tima 2010-10-06 14:18:29

+0

嗨請發佈您的代碼片段...我會嘗試編輯它。 – 2010-10-06 15:16:41

+0

我包含了我的代碼的重要部分。 '不工作'是不正確的,但如果我這樣做,標籤活動將完成。我想要的是,只要Tabactivity中的一項活動即可完成,另一項將在Tab內開始。 – Tima 2010-10-07 12:28:20

-1

只需添加這對所有標籤:

yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     getTabHost().setCurrentTab(0); 
    } 
}); 
24

選項卡中的活動可以通過以下方式進行切換。

首先讓我們來了解流程:下

  1. 我們有一個接頭主機,活動(比如列表),從中我們需要去到下一個活動(說的詳細點的點擊項)同一個標籤。爲此,我們可以使用替換活動的概念。同時設置所選標籤的標誌和其他知道現在正在顯示的細節的標誌

  2. 當我們按回時,我們應該在同一個標​​簽下獲得先前的活動。爲此,而不是再次替換活動,我們可以刷新選項卡,同時使用選定的選項卡的特定標誌。此外,如果標誌顯示的細節是真實的,我們會去的名單在同一個標​​籤,否則我們將tabwidget(正常使用onBackPressed的)之前去活動

的代碼可以如下..

  1. 對於從列表到詳細...

(這可以在onClickListener)

private OnClickListener textListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Constants.SHOW_DETAILS = true; 
     Intent intent = new Intent(context, DetailsActivity.class); 
     replaceContentView("activity3", intent); 
     } 
}; 

public void replaceContentView(String id, Intent newIntent) { 
    View view = ((ActivityGroup) context) 
      .getLocalActivityManager() 
      .startActivity(id, 
        newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
      .getDecorView(); 
    ((Activity) context).setContentView(view); 

} 
  1. 當回壓一點,我們在每一個活動的覆蓋上BackPressed選項卡下,從細節再去列表屏幕

    @Override 
        public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    if (MathHelper.SHOW_DETAILS) { 
        Log.e("back", "pressed accepted"); 
        Constants.LIST_ACTIVITY = 1; 
        Constants.SHOW_DETAILS = false; 
        Intent intent = new Intent(this, Tab_widget.class); 
        startActivity(intent); 
        finish(); 
        } 
    } 
    

這裏最重要的部分是 Constants.LIST_ACTIVITY = 1;它表明我們是在哪個標籤。所以相應的活動將其作爲0,1,2值...等

的標籤活動被刷新時再加載正確的列表(Activty),我們必須包括這在TabWidget的onCreate創建標籤後

tabHost.setCurrentTab(Constants.LIST_ACTIVITY); 
+2

+1,只是一個通知 - 上面的「上下文」是指包含的活動,而不是容器(TabActivity)。哦,我不知道爲什麼沒有跟隨Android的意圖設計和使用Constants.LIST_ACTIVITY代替.. – kellogs 2011-08-13 22:43:10

+0

雅糾正情況下指的是包括標籤所包含的活動。 – 2011-08-16 09:33:09

+0

我不同意,context *是TabActivity,否則你不能將它轉換爲ActivityGroup。 – 2011-08-17 09:48:58

0

只需使用Intent.FLAG_ACTIVITY_CLEAR_TOP標誌更換活動所需的標籤。

intent = new Intent().setClass(this, YourActivity.class); 
spec = tabHost.newTabSpec("tab1").setIndicator("Tab1",null) 
     .setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
tabHost.addTab(spec);