AndroidActivityGroup和TabActiviy的差異性
標簽:
androidactivitygrouptabactiviy差異性雜談 |
分類: Android技術 |
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"><</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">></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"><</span>LocalActivityRecord<span style="word-wrap:normal; word-break:normal; border:0px; padding:0px; margin:0px; color:rgb(51,153,51); background-color:transparent">></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"><</span>LocalActivityRecord<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><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"><</span>String<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(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來解決這個問題。
一、效果圖
要求點擊底部不同圖片按鈕切換不同的Activity,并在中間顯示Activity對應的ContentView。
<wbr></wbr>
二、 實現代碼
2.1 layout.xml
< 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
在一個主界面中做Activity切換一般都會用TabActivity,使用方便,Activity互相之間相對獨立,但是可定制性不強,而且修改起來很麻煩。當然也可以把layout分開,把邏輯代碼全寫在主界面的邏輯代碼中,但是很明顯可維護性相當差,這里通過ActivityGroup來解決這個問題
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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