ActivityGroup根據SDK的解釋" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android ActivityGroup和TabActiviy的差異性

系統 1830 0

AndroidActivityGroup和TabActiviy的差異性

1)<wbr>ActivityGroup</wbr> <wbr><wbr></wbr></wbr>

<wbr><wbr><wbr><span size="+0" style="word-wrap:normal; word-break:normal; line-height:24px">根據SDK的解釋其功能“<span style="color:#ED1C24; word-wrap:normal; word-break:normal"><strong>A screen that contains and runs multiple embedded activities.”。</strong><span style="color:#000000; word-wrap:normal; word-break:normal">翻譯成漢語也就是大概</span></span><span style="font-weight:bold"><span style="color:#ED1C24; word-wrap:normal; word-break:normal">"<span style="word-wrap:normal; word-break:normal; line-height:normal; font-weight:normal; font-size:12px; font-family:宋體,微軟雅黑,'Lucida Grande',Geneva,Arial,Verdana,'Lucida sans Unicode',Helvetica,sans-serif; color:rgb(112,112,112); border-collapse:separate"><span style="word-wrap:normal; word-break:normal; line-height:19px; font-size:13px"><strong><span style="color:#ED1C24; word-wrap:normal; word-break:normal">在Android中,ActivityGroup類是Activity的容器,可以包含多個嵌套進來的Activitys</span></strong></span></span>".<span style="word-wrap:normal; word-break:normal; line-height:normal; font-weight:normal; font-size:12px; font-family:宋體,微軟雅黑,'Lucida Grande',Geneva,Arial,Verdana,'Lucida sans Unicode',Helvetica,sans-serif; color:rgb(112,112,112); border-collapse:separate"><span style="word-wrap:normal; word-break:normal; line-height:19px; font-size:13px"><span style="color:#000000; word-wrap:normal; word-break:normal">接下來依然采用源碼分析的方式來了解該類的內部實現。</span></span></span></span></span></span></wbr></wbr></wbr>

<wbr><wbr><wbr><span style="color:#000000; word-wrap:normal; word-break:normal">首先,從SDK中和源碼中都可以獲知,ActivityGroup類的父類是Activity,也就是說二者具有相同的接口和生命周期,同Activity一樣,也有onCreate()、onPause()等函數可供我們重載。在ActivityGroup的源碼中有成員變量<br><wbr><wbr><wbr>protected LocalActivityManager mLocalActivityManager;<br> 該變量在ActivityGroup的構造函數中創建并初始化,可見,ActivityGroup的功能實現肯定是要委托給這個對象來完成了。為了給用戶開放對此對象的訪問,ActivityGroup提供了</wbr></wbr></wbr></span></wbr></wbr></wbr>

<wbr></wbr>

              1
2
3
4
5

            
              
                
                  
                    public
                  
                
                
                  
                    final
                  
                
                 LocalActivityManager getLocalActivityManager
                
                  (
                
                
                  )
                
                
                  {
                
                
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>return</strong></span> mLocalActivityManager<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span></wbr></wbr>
              
            

通過瀏覽ActivityGroup的源碼可以發現,幾乎全部是以通過LocalActivityManager對象來完成的具體動作,比如:

                1
2
3
4
5
6
7
8
9
10
11

              
                
                  
                    
                      protected
                    
                  
                  
                    
                      void
                    
                  
                   onCreate
                  
                    (
                  
                  Bundle savedInstanceState
                  
                    )
                  
                  
                    {
                  
                  
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>super</strong></span>.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">onCreate</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>savedInstanceState<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
        Bundle states <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> savedInstanceState <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">!=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>null</strong></span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">?</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>Bundle<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> savedInstanceState.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">getBundle</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>STATES_KEY<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">:</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>null</strong></span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
        mLocalActivityManager.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">dispatchCreate</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>states<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span></wbr></wbr></wbr></wbr></wbr>
                
              

下面,我們就來看一下LocalActivityManager的源碼。在該類中,提供了一個私有類

                1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

              
                
                  
                    
                      private
                    
                  
                  
                    
                      static
                    
                  
                  
                    
                      class
                    
                  
                   LocalActivityRecord 
                  
                    
                      extends
                    
                  
                   Binder 
                  
                    {
                  
                  
<wbr>
        LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,51,153); background-color:transparent">String</span> _id, Intent _intent<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr>
            id <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> _id<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
            intent <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> _intent<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr><wbr><wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>final</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,51,153); background-color:transparent">String</span> id<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>                <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Unique name of this record.</em></span>
<wbr>
        Intent intent<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>                  <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Which activity to run here.</em></span>
<wbr>
        ActivityInfo activityInfo<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>      <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Package manager info about activity.</em></span>
<wbr>
        Activity activity<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>              <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Currently instantiated activity.</em></span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,51,153); background-color:transparent">Window</span> window<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>                  <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Activity's top-level window.</em></span>
<wbr>
        Bundle instanceState<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>           <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Last retrieved freeze state.</em></span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>int</strong></span> curState <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> RESTORED<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>        <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(102,102,102); background-color:transparent"><em>// Current state the activity is in.</em></span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
                
              

用于保存Activity的信息,并提供了

                1
2
3
4
5
6
7

              
                
                  
                    
                      private
                    
                  
                  
                    
                      final
                    
                  
                   Map
                  
                    <
                  
                  String, LocalActivityRecord
                  
                    >
                  
                   mActivities
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>new</strong></span> HashMap<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&lt;</span>String, LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&gt;</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>private</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>final</strong></span> ArrayList<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&lt;</span>LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&gt;</span> mActivityArray
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>new</strong></span> ArrayList<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&lt;</span>LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&gt;</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span></wbr></wbr></wbr>
                
              

采用這樣的數據結構用于對所有嵌入的子Activity信息進行保存處理。其中前者用于通過String快速查找,后者用于以數組的方式快速訪問,是典型的以空間換時間的的方式。

                1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

              
                
                  
                    
                      public
                    
                  
                  
                    
                      void
                    
                  
                   dispatchCreate
                  
                    (
                  
                  Bundle state
                  
                    )
                  
                  
                    {
                  
                  
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>if</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>state <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">!=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>null</strong></span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>final</strong></span> Iterator<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&lt;</span>String<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">&gt;</span> i <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> state.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">keySet</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span>.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">iterator</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>while</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>i.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">hasNext</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>try</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>final</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,51,153); background-color:transparent">String</span> id <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> i.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">next</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>final</strong></span> Bundle astate <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> state.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">getBundle</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
                    LocalActivityRecord r <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> mActivities.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">get</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>if</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>r <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">!=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>null</strong></span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr>
                        r.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">instanceState</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> astate<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>else</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr>
                        r <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>new</strong></span> LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id, <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>null</strong></span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
                        r.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">instanceState</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> astate<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
                        mActivities.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">put</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id, r<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
                        mActivityArray.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">add</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>r<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>catch</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,51,153); background-color:transparent">Exception</span> e<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr>
……
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr><wbr><wbr>
        mCurState <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> CREATED<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
                
              

從這里我們可以看出,當有一個ActivityGroup被Create的時候,就會有對應的Activity信息被保存到數組中。

當我們調用LocalActivityManager的startActivity()以產生Window的時候,我們也可以看到

                1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

              
                
                  
                    
                      public
                    
                  
                  
                    Window
                  
                   startActivity
                  
                    (
                  
                  
                    String
                  
                   id, Intent intent
                  
                    )
                  
                  
                    {
                  
                  
<wbr>
                   ……
<wbr>
        LocalActivityRecord r <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> mActivities.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">get</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>if</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>r <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">==</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>null</strong></span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr>
            r <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>new</strong></span> LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id, intent<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
            adding <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">=</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,0,102); background-color:transparent"><strong>true</strong></span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr>
                   ……
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; background-color:transparent"><strong>if</strong></span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>adding<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span> <span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">{</span>
<wbr>
            mActivities.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">put</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>id, r<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr>
            mActivityArray.<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,102,51); background-color:transparent">add</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">(</span>r<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">)</span><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">;</span>
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span>
<wbr>
        ……
<wbr><span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(0,153,0); background-color:transparent">}</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
                
              

有了這個數組,就可以遍歷到ActivityGroup中嵌入的Activitys了,從而可以實現ActivityGroup的功能。

以上的分析結果產生的類圖如下:

其核心的方面主要體現在:

<wbr><wbr><wbr><wbr><wbr><wbr>Intent i = new Intent(MainActivity.this,IndexActivity.class);<br><wbr><wbr><wbr><wbr><wbr><wbr>Window indexWindow = localManager.startActivity(INDEX_ID, i);<br><wbr><wbr><wbr><wbr><wbr><wbr>indexDecorView = indexWindow.getDecorView();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr>localManager = this.getLocalActivityManager();</wbr></wbr></wbr></wbr></wbr>

然后將view加進你想要用的模塊,多個view之間控制好隱藏和顯示,就可以了 ,用activityGroup你會被焦點的問題搞郁悶,我現在一直糾結,如何在window 之間切換,或者request到focus,有這個方面的經驗可以談下。

范例1 使用ActivityGroup來切換Activity和Layout

<wbr><wbr><wbr></wbr></wbr></wbr> 在一個主界面中做Activity切換一般都會用TabActivity,使用方便,Activity互相之間相對獨立,但是可定制性不強,而且修改起來很麻煩。當然也可以把layout分開,把邏輯代碼全寫在主界面的邏輯代碼中,但是很明顯可維護性相當差,這里通過ActivityGroup來解決這個問題。
一、效果圖

Android ActivityGroup和TabActiviy的差異性

    要求點擊底部不同圖片按鈕切換不同的Activity,并在中間顯示Activity對應的ContentView。

<wbr></wbr>

  二、 實現代碼

2.1  layout.xml

<? xml<wbr>version="1.0"<wbr>encoding="utf-8"</wbr></wbr> ?>
< LinearLayout<wbr></wbr> xmlns:android ="http://schemas.android.com/apk/res/android"
<wbr><wbr><wbr><wbr>android:layout_width</wbr></wbr></wbr></wbr>
="fill_parent" <wbr>android:orientation</wbr> ="vertical"
<wbr><wbr><wbr><wbr>android:layout_height</wbr></wbr></wbr></wbr>
="fill_parent" >
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
< LinearLayout<wbr></wbr> android:gravity ="center_horizontal"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:background</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="@drawable/myinfor2" <wbr>android:layout_width</wbr> ="fill_parent"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_height</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="wrap_content" >
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
< TextView<wbr></wbr> android:id ="@+id/cust_title" <wbr>android:textColor</wbr> ="@android:color/white"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:textSize</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="28sp" <wbr>android:text</wbr> ="模塊1" <wbr>android:layout_width</wbr> ="wrap_content"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_height</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="wrap_content" ></ TextView >
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
</ LinearLayout >
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
<!-- <wbr>中間動態加載View<wbr></wbr></wbr> -->
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
< ScrollView<wbr></wbr> android:measureAllChildren ="true" <wbr>android:id</wbr> ="@+id/containerBody"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_weight</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="1" <wbr>android:layout_height</wbr> ="fill_parent"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_width</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="fill_parent" >
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
</ ScrollView >
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
< LinearLayout<wbr></wbr> android:background ="@android:color/black"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_gravity</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="bottom" <wbr>android:orientation</wbr> ="horizontal"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_width</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="fill_parent" <wbr>android:layout_height</wbr> ="wrap_content" >
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<!-- <wbr>功能模塊按鈕1<wbr></wbr></wbr> -->
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
< ImageView<wbr></wbr> android:id ="@+id/btnModule1" <wbr>android:src</wbr> ="@android:drawable/ic_dialog_dialer"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_marginLeft</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="7dp" <wbr>android:layout_marginTop</wbr> ="3dp"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_marginBottom</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="3dp" <wbr>android:layout_width</wbr> ="wrap_content"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_height</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="wrap_content" <wbr></wbr> />
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<!-- <wbr>功能模塊按鈕2<wbr></wbr></wbr> -->
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
< ImageView<wbr></wbr> android:id ="@+id/btnModule2" <wbr>android:src</wbr> ="@android:drawable/ic_dialog_info"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_marginLeft</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="7dp" <wbr>android:layout_marginTop</wbr> ="3dp"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_marginBottom</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="3dp" <wbr>android:layout_width</wbr> ="wrap_content"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_height</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="wrap_content" <wbr></wbr> />
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<!-- <wbr>功能模塊按鈕3<wbr></wbr></wbr> -->
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
< ImageView<wbr></wbr> android:id ="@+id/btnModule3" <wbr>android:src</wbr> ="@android:drawable/ic_dialog_alert"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_marginLeft</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="7dp" <wbr>android:layout_marginTop</wbr> ="3dp"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_marginBottom</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="3dp" <wbr>android:layout_width</wbr> ="wrap_content"
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_height</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
="wrap_content" <wbr></wbr> />
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
</ LinearLayout >
</ LinearLayout >

2.2  TestView.java


public <wbr></wbr> class <wbr>TestView<wbr></wbr></wbr> extends <wbr>ActivityGroup<wbr>{<br><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr> private <wbr>ScrollView<wbr>container<wbr></wbr></wbr></wbr> = <wbr></wbr> null ;
<wbr><wbr><wbr><wbr>@Override<br><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
protected <wbr></wbr> void
<wbr>onCreate(Bundle<wbr>savedInstanceState)<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> super .onCreate(savedInstanceState);
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
// <wbr>隱藏標題欄</wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>requestWindowFeature(Window.FEATURE_NO_TITLE);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> // <wbr>設置視圖</wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>setContentView(R.layout.layout);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> = <wbr>(ScrollView)<wbr>findViewById(R.id.containerBody);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> // <wbr>模塊1</wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>ImageView<wbr>btnModule1<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> = <wbr>(ImageView)<wbr>findViewById(R.id.btnModule1);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>btnModule1.setOnClickListener(</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> new <wbr>OnClickListener()<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@Override<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> public <wbr></wbr> void <wbr>onClick(View<wbr>v)<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container.removeAllViews();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container.addView(getLocalActivityManager().startActivity(<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> " Module1 " ,
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
new <wbr>Intent(TestView.</wbr> this ,<wbr>ModuleView1.</wbr> class
)
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>.getDecorView());<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>})<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
// <wbr>模塊2</wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>ImageView<wbr>btnModule2<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> = <wbr>(ImageView)<wbr>findViewById(R.id.btnModule2);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>btnModule2.setOnClickListener(</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> new <wbr>OnClickListener()<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@Override<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> public <wbr></wbr> void <wbr>onClick(View<wbr>v)<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container.removeAllViews();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container.addView(getLocalActivityManager().startActivity(<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> " Module2 " ,
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
new <wbr>Intent(TestView.</wbr> this ,<wbr>ModuleView2.</wbr> class
)
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>.getDecorView());<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>});<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
// <wbr>模塊3</wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>ImageView<wbr>btnModule3<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> = <wbr>(ImageView)<wbr>findViewById(R.id.btnModule3);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>btnModule3.setOnClickListener(</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> new <wbr>OnClickListener()<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@Override<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> public <wbr></wbr> void <wbr>onClick(View<wbr>v)<wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container.removeAllViews();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>container.addView(getLocalActivityManager().startActivity(<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> " Module3 " ,
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
new <wbr>Intent(TestView.</wbr> this ,<wbr>ModuleView3.</wbr> class
)
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>.getDecorView());<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>});<br><wbr><wbr><wbr><wbr>}<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

    代碼說明:

      a).   ModuleView1、 ModuleView2 ModuleView3 分別繼承自Activity。

      b).  想動態改變標題可以通過cust_title獲取TextView進行設置。

注釋:想代碼實現將子activity的所用的layout加入到主activty中的layout

  public class FormActivity extends ActivityGroup {

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.form);

  LocalActivityManager m = getLocalActivityManager();

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

  Window w = m.startActivity("tratat", intent);

  View v = w.getDecorView();

  LinearLayout container = (LinearLayout)findViewById(R.id.fieldsContainer);

  container.addView(v);

  }

  }

<wbr>范例<wbr>2<wbr>ActivityGroup + GridView 實現Tab分頁標簽</wbr></wbr></wbr>

<wbr><wbr><wbr><a style="text-decoration:none; color:rgb(41,113,187)">http://blog.csdn.net/hellogv/article/details/6057174</a></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr> 2) tabActivity

<wbr><wbr><wbr>tabActivity繼承自Activity,其內部定義好了TabHost,可以通過getTabHost()獲取。TabHost 包含了兩種子元素:一些可以自由選擇的Tab 和tab對應的內容tabContentto,在Layout的&lt;TabHost&gt;下它們分別對應 TabWidget和FrameLayout。 <div>  使用TabActivity可以讓同一個界面容納更多的內容。我們將按照Standup Timer里的TeamDetailsActivity來講述TabActivity的使用。在該例中,包含了兩個Tab一個用于展示team的統計信息,一個用于展示team所參加的會議的列表(這是一個ListView)。</div> <div> <h2 style="margin:0px; padding:0px; border:0px; list-style:none; color:rgb(0,0,0); line-height:1.5"> <span style="word-wrap:normal; word-break:normal; line-height:normal; font-weight:normal; font-size:14px; border-collapse:separate">創建Layout<wbr></wbr></span> </h2> <div style="padding:0px; margin:0px">  這里需要注意的是不管你是使用TabActivity 還是自定義TabHost,都要求以TabHost作為XML布局文件的根。 <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;?</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,255)">xml version="1.0" encoding="utf-8"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">?&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">TabHost</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">xmlns:android</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="http://schemas.android.com/apk/res/android"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:id</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="@android:id/tabhost"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:layout_width</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:layout_height</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">LinearLayout</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:orientation</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="vertical"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:layout_width</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:layout_height</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">TabWidget</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:id</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="@android:id/tabs"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:layout_width</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:layout_height</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="wrap_content"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">/&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">FrameLayout</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:id</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="@android:id/tabcontent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:layout_width</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:layout_height</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,128,0)">&lt;!--</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,128,0)">省略部分代碼</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,128,0)">--&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">TextView</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:id</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="@+id/no_team_meetings"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:textSize</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="18sp"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:layout_width</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:layout_height</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">/&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">TextView</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:id</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="@+id/no_team_meeting_stats"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:textSize</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="18sp"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)">android:layout_width</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(255,0,0)"><br style="padding:0px; margin:0px"> android:layout_height</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">="fill_parent"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">/&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;/</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">FrameLayout</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;/</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">LinearLayout</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&lt;/</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(128,0,0)">TabHost</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">&gt;</span> </div> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> </div> <div style="padding:0px; margin:0px">通常我們采用線性布局所以&lt;TabHost&gt; 的子元素是 &lt;LinearLayout&gt;。&lt;TabWidger&gt;對應Tab。&lt;FrameLayout&gt;則用于包含Tab需要展示的內容。需要注意的是&lt;TabWidger&gt; 和&lt;FrameLayout&gt;的Id 必須使用系統id,分別為android:id/tabs 和 android:id/tabcontent 。因為系統會使用者兩個id來初始化TabHost的兩個實例變量(mTabWidget 和 mTabContent)。</div> <h2 style="margin:0px; padding:0px; border:0px; list-style:none; color:rgb(0,0,0); line-height:1.5"> 編寫Java代碼</h2> <div style="padding:0px; margin:0px">  我們可以采用兩種方法編寫標簽頁:一種是繼承TabActivity ,然后使用getTabHost()獲取TabHost對象;第二種方法是使用自定的TabHost在布局文件上&lt;TabHost&gt;的自定義其ID,然后通過findViewById(),方法獲得TabHost對象。</div> <div style="padding:0px; margin:0px">  本文中采用繼承TabActivity的方法。</div> <div style="padding:0px; margin:0px"> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">private</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">void</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">createTabs() {<br style="padding:0px; margin:0px"> TabHost tabhost</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">=</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">getTabHost();<br style="padding:0px; margin:0px"> tabhost.addTab(tabhost.newTabSpec(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">stats_tab</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">).<br style="padding:0px; margin:0px"> setIndicator(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">this</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">.getString(R.string.stats)).<br style="padding:0px; margin:0px"> setContent(createMeetingDetails(team)));<br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"> tabhost.addTab(tabhost.newTabSpec(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">meetings_tab</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">).<br style="padding:0px; margin:0px"> setIndicator(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">this</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">.getString(R.string.meetings)).<br style="padding:0px; margin:0px"> setContent(createMeetingList()));<br style="padding:0px; margin:0px"> getTabHost().setCurrentTab(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">0</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">);<br style="padding:0px; margin:0px"> }</span> </div> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> Java代碼中我們首先需要做的是獲取TabHost對象,可以通過TabActivtiy里的getTabHsot()方法。如果是自定義TabHost,在添加Tabs前應該調用<span style="word-wrap:normal; word-break:normal"><wbr></wbr></span><a target="_blank" style="text-decoration:none; color:rgb(41,113,187)">setUp()</a>方法。</div> <div style="padding:0px; margin:0px"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; word-wrap:break-word"></pre> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">mTabHost</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">=</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">(TabHost)findViewById(R.id.tabhost);<br style="padding:0px; margin:0px"> mTabHost.setup();<br style="padding:0px; margin:0px"> mTabHost.addTab(TAB_TAG_1,</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">Hello, world!</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">,</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">Tab 1</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">);</span> </div> </div> <pre style="white-space:normal">SDK上的原文:</pre> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; word-wrap:break-word"> <span style="word-wrap:normal; word-break:normal; line-height:19px; padding:0px; font-size:10pt; margin:0px"><span style="padding:0px; margin:0px"><span style="font-family:Courier New; word-wrap:normal; word-break:normal"> Call setup() before adding tabs if loading TabHost using findViewById().<wbr><span style="padding:0px; margin:0px">However<wbr></wbr></span>:<wbr></wbr></wbr></span></span></span><span style="padding:0px; margin:0px">You do not need to call setup() after getTabHost() in<wbr><code style="padding:0px; margin:0px"><a style="text-decoration:none; color:rgb(41,113,187)">TabActivity</a></code>.<wbr></wbr></wbr></span></pre> <span style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"></span>  接著向TabHost添加tabs.即調用tabHost.addTab(TabSpec) 方法。<a target="_blank" style="text-decoration:none; color:rgb(41,113,187)">TabSpec</a>主要包含了setIndicator 和 setContent 方法,通過這兩個方法來指定Tab 和 TanContent。</div> <div style="padding:0px; margin:0px">  TabSpec 通過<wbr><span style="word-wrap:normal; word-break:normal; padding:0px; margin:0px">.newTabSpec(String tag</span><span style="word-wrap:normal; word-break:normal; padding:0px; margin:0px">)來創建實例。實例化后對其屬性進行設置。setIndicator()設置tab,它有3個重載的函數</span></wbr> </div> <div style="padding:0px; margin:0px"> <ul style="margin:0px 0px 0px 45px; padding:0px; border:0px; list-style-position:initial"> <li style="margin:0px; padding:0px; border:0px; list-style:disc"> public TabHost.TabSpec setIndicatior(CharSwquence label,Drawable icon).指定tab的標題和圖標。</li> <li style="margin:0px; padding:0px; border:0px; list-style:disc">public TabHost.TabSpec (View view)通過View來自定義tab</li> <li style="margin:0px; padding:0px; border:0px; list-style:disc">public TabHost.TabSpec(CharSequence label) 指定tab的標題,此時無圖標。</li> </ul> <div style="padding:0px; margin:0px">  <wbr>setContent 指定tab的展示內容,它也有3種重載</wbr> </div> </div> <div style="padding:0px; margin:0px"> <ul style="margin:0px 0px 0px 45px; padding:0px; border:0px; list-style-position:initial"> <li style="margin:0px; padding:0px; border:0px; list-style:disc">public TabHost.TabSpec setContent(TabHost.TabContentFactory )</li> <li style="margin:0px; padding:0px; border:0px; list-style:disc">public TabHost.TabSpec setContent(int ViewId)</li> <li style="margin:0px; padding:0px; border:0px; list-style:disc">public TabHost.TabSpec setContent(Intent intent)</li> </ul> <div style="padding:0px; margin:0px">  后兩種方法比較后理解一個是通過 ViewId指定顯示的內容,如.setContent(R.id.Team_EditText)。第三種則是直接通過Intent加載一個新的Activity頁。如.setContent(new Intent(this, MeetingActivity.class)));</div> </div> <div style="padding:0px; margin:0px">  本例中是通過<a target="_blank" style="text-decoration:none; color:rgb(41,113,187)">TabContentFactory</a><span style="word-wrap:normal; word-break:normal"><wbr></wbr></span>來指定對應的TabContent。<a target="_blank" style="text-decoration:none; color:rgb(41,113,187)">TabContentFactory</a><span style="word-wrap:normal; word-break:normal"><wbr></wbr></span>是一個接口,其只包含了 一個返回 View 的createTabContent(String tag)方法。</div> <div style="padding:0px; margin:0px"> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">private</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TabContentFactory createMeetingDetails(Team team2) {<br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">return</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">new</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TabHost.TabContentFactory() {<br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"> @Override<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">public</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">View createTabContent(String tag) {<br style="padding:0px; margin:0px">           //設置View<br style="padding:0px; margin:0px"> setStatsTabContent();<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">return</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">findViewById(R.id.teamStats);<br style="padding:0px; margin:0px"> }<br style="padding:0px; margin:0px"> };<br style="padding:0px; margin:0px"> }<br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">private</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TabHost.TabContentFactory createMeetingList()<br style="padding:0px; margin:0px"> {<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">return</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">new</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TabHost.TabContentFactory() {<br style="padding:0px; margin:0px"><br style="padding:0px; margin:0px"> @Override<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">public</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">View createTabContent(String tag) {</span> </div> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">      <br style="padding:0px; margin:0px"> meetingListAdapter</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">=</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">createMeetingListAdapter<wbr>();<br style="padding:0px; margin:0px"> meetingList.setAdapter(meetingListAdapter);<br style="padding:0px; margin:0px"></wbr></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">return</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">meetingList;<br style="padding:0px; margin:0px"> }<br style="padding:0px; margin:0px"> };<br style="padding:0px; margin:0px"> }</span> </div> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> <div style="padding:0px; margin:0px"></div> 事先聲明好的</div> <div style="padding:0px; margin:0px"> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">private</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">ListView meetingList</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">=</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">null</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">;<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">private</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">ArrayAdapter</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">&lt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">String</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">&gt;</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">meetingListAdapter</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">=</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">null</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">;</span> </div> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> <div style="padding:0px; margin:0px">我們也可以讓TabActivity去實現TabContentFactory 接口</div> <div style="padding:0px; margin:0px"> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">public</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">class</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">Tabs2</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">extends</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TabActivity</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">implements</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TabHost.TabContentFactory</span> </div> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> 然后在TabActiviy類中實現createTabContent方法</div> <div style="padding:0px; margin:0px"> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <pre style="white-space:normal; padding:0px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">@Override<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">public</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">View createTabContent(String tag) {<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">final</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TextView tv</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">=</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">new</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">TextView(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">this</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">);<br style="padding:0px; margin:0px"> tv.setText(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">Content for tab with tag</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">+</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">tag);<br style="padding:0px; margin:0px"></span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,255)">return</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; margin:0px; color:rgb(0,0,0)">tv;<br style="padding:0px; margin:0px"> }</span> </div> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> </div> setStatsTabContent();方法</div> <div style="padding:0px; margin:0px"> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" name="code_img_closed_2fabc5ab-8d5e-4559-b451-8019572189d4" alt="Android&lt;wbr&gt;&lt;wbr&gt;&lt;wbr&gt;ActivityGroup和TabActiviy的差異性" title="Android&lt;wbr&gt;&lt;wbr&gt;&lt;wbr&gt;ActivityGroup和TabActiviy的差異性" style="margin:0px; padding:0px 5px 0px 0px; border:0px; list-style:none; vertical-align:middle"><span style="word-wrap:normal; word-break:normal; line-height:1.5; border:1px solid rgb(128,128,128); padding:2px; margin:0px; background-color:rgb(255,255,255)">setStatsTabContent</span> </div> <p style="margin:5px auto; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal"> <wbr></wbr></p> </div> <div style="padding:0px; margin:0px">  最后將TabSpec 添加到 TabHost上,即tabHost.addTab(tabSpec)。我們發現TabSpec 的setIndicator 和 setContent 方法返回的都是 TabSpec 自身所以可以使用竄的方式編寫代碼:</div> <div style="border:1px solid rgb(204,204,204); padding:5px; overflow:auto; font-size:12px; margin:0px; word-break:break-all; font-family:'Courier new'; background-color:rgb(245,245,245)"> <h1 style="margin:0px; padding:0px; border:0px; list-style:none; color:rgb(0,0,0); line-height:1.5"> </h1> </div> <pre style="white-space:normal; padding:0px; font-size:12px; margin-top:0px; margin-bottom:0px; font-family:'Courier new'; word-wrap:break-word"></pre> <div style="padding:0px; margin:0px"> <span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,0); font-family:'Courier new'">tabhost.addTab(tabhost.newTabSpec(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,0); font-family:'Courier new'">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,0); font-family:'Courier new'">stats_tab</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,0); font-family:'Courier new'">"</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,0); font-family:'Courier new'">)<br style="padding:0px; margin:0px"> .setIndicator(</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,255); font-family:'Courier new'">this</span><span style="word-wrap:normal; word-break:normal; line-height:1.5; padding:0px; font-size:12px; margin:0px; color:rgb(0,0,0); font-family:'Courier new'">.getString(R.string.stats))<br style="padding:0px; margin:0px"> .setContent(createMeetingDetails(team)));</span> </div> </div> </wbr></wbr></wbr>
<wbr></wbr>
<wbr></wbr> 3)兩者之間的差異性

在一個主界面中做Activity切換一般都會用TabActivity,使用方便,Activity互相之間相對獨立,但是可定制性不強,而且修改起來很麻煩。當然也可以把layout分開,把邏輯代碼全寫在主界面的邏輯代碼中,但是很明顯可維護性相當差,這里通過ActivityGroup來解決這個問題

Android ActivityGroup和TabActiviy的差異性


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久久免费观看 | 伊人久久成人 | 精品精品国产自在香蕉网 | 精品国产夜色在线 | 久久频精品99香蕉国产 | 成人在线观看国产 | 久草在线最新 | 国产精品自拍视频 | 不卡中文一二三区 | 国产成人免费手机在线观看视频 | 日韩欧美一区二区久久 | 精品久久国产 | 国产成人教育视频在线观看 | 精品国产一区二区二三区在线观看 | 我不卡老子影院午夜伦我不卡四虎 | 久久精品福利视频 | 欧美日穴 | 国产伦理精品 | 久久经典 | 欧美一区永久视频免费观看 | 夜夜夜夜夜操 | 亚洲黄色小视频 | 国产精品亚洲欧美一级久久精品 | 最近中文字幕无吗高清视频 | 青青青青青国产费线在线观看 | 国产色婷婷精品综合在线手机播放 | 国产成人精品无缓存在线播放 | 久月婷婷| 午夜91| 波多野结衣手机视频一区 | 国产成人18黄禁网站免费观看 | 久久久久国产精品四虎 | 欧美三级aaa | 综合中文字幕 | 日本亚洲欧美美色 | 欧美在线成人午夜网站 | 国产精品不卡 | 国产精品久久久久久福利69堂 | 亚洲色无码播放 | 91精东果冻蜜桃星空麻豆 | a毛片免费观看 |