<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TabActivity &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/tabactivity/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Tue, 02 Jul 2019 05:44:30 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>TabActivity &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Android TabHost Without TabActivity</title>
		<link>https://noter.tw/2109/android-tabhost-without-tabactivity/</link>
					<comments>https://noter.tw/2109/android-tabhost-without-tabactivity/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sat, 25 Feb 2012 05:47:50 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[java.lang.IllegalStateException]]></category>
		<category><![CDATA[TabActivity]]></category>
		<category><![CDATA[TabHost]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2109</guid>

					<description><![CDATA[<p>頁籤(TabHost)在行動APP中扮演了很重要的角色，由於手機的畫面比較小，因此如果有很多功能需要提供給使用者，不太可能全部擠在同一個頁面，因此頁籤功能可以讓使用者有比較好的體驗，讓使用者操作起來就&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2109/android-tabhost-without-tabactivity/" data-wpel-link="internal">Android TabHost Without TabActivity</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><span style="color: #ff0000;">頁籤(TabHost)</span></strong>在行動APP中扮演了很重要的角色，由於手機的畫面比較小，因此如果有很多功能需要提供給使用者，不太可能全部擠在同一個頁面，因此頁籤功能可以讓使用者有比較好的體驗，讓使用者操作起來就像在「同一個頁面」，要切換功能也比較方便。但Google <strong>TabHost</strong>找到的範例大多是使用<span style="color: #ff0000;"><strong>TabActivity</strong></span>來操作TabHost，而<a href="http://developer.android.com/reference/android/app/TabActivity.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">官網<span class="wpel-icon wpel-image wpel-icon-6"></span></a>已經明確的指出<strong>TabActivity這個類別已經過期</strong>(deprecated)。<br />
<span id="more-2109"></span></p>
<blockquote><p><strong>This class is deprecated.</strong><br />
New applications should use Fragments instead of this class; to continue to run on older devices, you can use the v4 support library which provides a version of the Fragment API that is compatible down to <code><a href="http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#DONUT" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">DONUT<span class="wpel-icon wpel-image wpel-icon-6"></span></a></code>.</p></blockquote>
<p>照著上面官網所提到的可以透過<span style="color: #ff0000;"><strong>Fragments</strong></span>來取代TabActivity的功能。<br />
為了避免「<strong>我的股票精算師</strong>」往後也會面臨到這種困擾，小蛙開始找有沒有替代方案，既然過期的是TabActivity，TabActivity是繼承<strong>ActivityGroup</strong>，而ActivityGroup又是繼承<strong>Activity</strong>，那應該有可能將TabHost放置在Activity中吧？Google上發現的確有高手分享相關文章，小蛙就以「最少修改」的方式進行「<strong>我的股票精算師</strong>」修改，其實把TabActivity用Activity取代並不難，但是不知道從何修改起，也不知道問題到底在哪，從官方的TabActivity原始碼中應該可以看出一些端倪，看來要增進自己的能力還是必須要<strong>多看官方原始碼</strong>才行。<br />
不廢話了，直接進程式碼吧！TabHost的使用方法小蛙就不再另外說明了，Google一下就有很多。這裡直接說明要修改的部分。小蛙參考了<strong><a href="http://stackoverflow.com/questions/3163884/android-tabhost-without-tabactivity" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">Stack Overflow這篇文章<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong>，建立TabHost的方始與使用TabActivity時完全相同，要修改部分如下(<strong><span style="color: #ff0000;">上面是原始版本，下面是修改過後的版本</span></strong>)：<br />
1. 把TabActivity改成Activity(廢話 &#8230;)</p>
<pre class="brush: java; gutter: false">public class MainActivity extends TabActivity</pre>
<pre class="brush: java; gutter: false">public class MainActivity extends Activity</pre>
<p>2. 取得TabHost物件，這裡不能透過像TabActivity一樣直接用getTabHost();。</p>
<pre class="brush: java; gutter: false">TabHost tabHost = getTabHost();</pre>
<pre class="brush: java; gutter: false">TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);</pre>
<p>3. 增加一個LocalActivityManager物件。這幾行是一定不能少，少了<span style="text-decoration: line-through;">對大家都不好</span>DDMS會一直報出大量的錯誤訊息。</p>
<pre class="brush: java; gutter: true">LocalActivityManager lam = new LocalActivityManager(MainActivity.this, false);
lam.dispatchCreate(savedInstanceState);
mHost.setup(lam);</pre>
<p>4. 最後最重要的重頭戲部份Override onPause及onResume(這個應該是有看過Source的人才知道的吧！小蛙太弱了&gt;&lt;)，少了這邊的設定，就算上面全部都對，到這邊還是會狂錯(感謝Stack Overflow的<a href="http://stackoverflow.com/users/563306/dcanh121" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right"><strong>dcanh121</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>以及<a href="http://stackoverflow.com/users/927471/cj-villa" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right"><strong>CJ Villa</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>)。</p>
<pre class="brush: java; gutter: true">@Override
protected void onPause() {
    lam.dispatchPause(isFinishing());
    super.onPause();
}
@Override
protected void onResume() {
    lam.dispatchResume();
    super.onResume();
}</pre>
<p>如果有任何一個步驟漏掉，會得到以下錯誤。</p>
<pre class="brush: text; gutter: false">Caused by: java.lang.IllegalStateException: Activities can't be added until the containing group has been created.</pre>
<p>到這邊就已經完成囉！其他tabHost.addTab的使用方式一模一樣。接下來會再另一篇說明怎麼在TabHost裡面切換多個Activity，並且讓每個頁籤中的Back Stack可以獨立運作。</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2109/android-tabhost-without-tabactivity/" data-wpel-link="internal">Android TabHost Without TabActivity</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2109/android-tabhost-without-tabactivity/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
