tabhost切換android
A. android里實現一個tabhost顯示怎麼弄
Tab標簽頁是界面設計時經常使用的界面控制項,可以實現多個分頁之間的快速切換,每個分頁可以顯示不同的內容,下圖是Android系統內置的Tab標簽頁,點擊「呼出/接聽鍵」後出現,用於電話呼出和查看撥號記錄、聯系人.
Tab標簽頁的使用
先要設計所有的分頁的界面布局
在分頁設計完成後,使用代碼建立Tab標簽頁,並給每個分頁添加標識和標題
最後確定每個分頁所顯示的界面布局
每個分頁建立一個XML文件,用以編輯和保存分頁的界面布局,使用的方法與設計普通用戶界面沒有什麼區別
建立一個「TabDemo」程序,包含三個XML文件,分別為tab1.xml、tab2.xml和tab3.xml,這3個文件分別使用線性布局、相對布局和絕對布局示例中的main.xml的代碼,並將布局的ID分別定義為layout01、layout02和layout03
關鍵代碼如下:
10. public void onCreate(Bundle savedInstanceState) {
11. super.onCreate(savedInstanceState);
12. TabHost tabHost = getTabHost();
13. LayoutInflater.from(this).inflate(R.layout.tab1, tabHost.getTabContentView(),true);
14. LayoutInflater.from(this).inflate(R.layout.tab2, tabHost.getTabContentView(),true);
15. LayoutInflater.from(this).inflate(R.layout.tab3, tabHost.getTabContentView(),true);
16. tabHost.addTab(tabHost.newTabSpec("TAB1")
17. .setIndicator("線性布局").setContent(R.id.layout01));
18. tabHost.addTab(tabHost.newTabSpec("TAB2")
19. .setIndicator("絕對布局").setContent(R.id.layout02));
20. tabHost.addTab(tabHost.newTabSpec("TAB3")
21. .setIndicator("相對布局").setContent(R.id.layout03));
22. }
23. }
第8行代碼的聲明TabDemo類繼承與TabActivity,與以往繼承Activity不同,TabActivity支持內嵌多個Activity或View
第12行代碼通過getTabHost()函數獲得了Tab標簽頁的容器,用以承載可以點擊的Tab標簽和分頁的界面布局。
第13行代碼通過LayoutInflater將tab1.xml文件中的布局轉換為Tab標簽頁可以使用的View對象
第16行代碼使用addTab()函數添加了第1個分頁,tabHost.newTabSpec("TAB1")表明在第12行代碼中建立的tabHost上,添加一個標識為TAB1的Tab分頁
第17行代碼使用setIndicator()函數設定分頁顯示的標題,使用setContent()函數設定分頁所關聯的界面布局
在使用Tab標簽頁時,可以將不同分頁的界面布局保存在不同的XML文件中,也可以將所有分頁的布局保存在同一個XML文件中
第一種方法有利於在Eclipse開發環境中進行可視化設計,並且不同分頁的界面布局在不同的文件中更加易於管理
第二種方法則可以產生較少的XML文件,同時編碼時的代碼也會更加簡潔
B. Android FragmentTabHost 切換報錯,求高手解決。log如下:
這個是因為你在onCreatView()裡面,view已經存在,並且有parent了,需要將parent的子view刪除就可以了。http://blog.csdn.net/renpengben/article/details/12615487
C. 為什麼android tabhost便簽切換後旋轉動畫會回到原來的位置
你沒有設置animation的 stayAfter(true); 方法名我記得不大清楚了,。就是XXAfter(true);這樣就不會回去了。。
D. android 不用TabActivity 如何實現 tabhost
通過fragment+radiogroup的方式實現。
1、定義布局文件
<LinearLayout
<FrameLayout//定義tab頁內容,注意這里layout_weight設為1,占滿剩餘空間
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RadioGroup>//定義tab選項卡
<RadioButton/>
<RadioButton/>
</RadioGroup>
</LinearLayout>
2、定義tab切換事件,顯示tab頁
java">protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.weibo_tab);//設置布局文件
radioGroup.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){//設置tab頁切換事件
@Override
publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){
//對應的tab頁,顯示對應的fragment布局
}
});
}
E. android中fragmenttabhost怎麼設置左右滑動
先來看看整個demo的結構:
TabAFm到TabEFm都是Fragment,並且每個Fragment對應一個布局文件。
TabAFm.java:
View Code
如上述代碼所示,TabAFm是一個Fragment,對應的布局文件是tab_a.xml,並實現了他的所有的生命周期回調函數並列印,便於調試
tab_a.xml布局中有個EditText
其他的Fragment大同小異,這里就不貼出代碼了
現在來看MainActivity:
View Code
MainActivity上述代碼所示
MainActivity是包含Fragment的Activity(也就是這里的5個Fragment)
他繼承了FragmentActivity(因為我這里用的是android-support-v4.jar)
用一個List<Fragment>去維護5個Fragment,也就是5個tab
main布局中有一個id為tab_content的FrameLayout,用來存放要顯示的Fragment。底部有一個RadioGroup,用於tab的切換,如下:
View Code
現在回到MainActivity中,下面這個FragmentTabAdapter類是關鍵,是我自己編寫的用於綁定和處理fragments和RadioGroup之間的邏輯關系
FragmentTabAdapter tabAdapter = new FragmentTabAdapter(this, fragments, R.id.tab_content, rgs);
現在看下FragmentTabAdapter:
View Code
這里解決Fragment切換重新載入布局的辦法,用的是把幾個Fragment全部Add,然後根據要顯示的哪個Fragment設置show或者hide
效果輸出:
10-10 11:55:41.168: INFO/System.out(18368): AAAAAAAAAA____onAttach// 第一次進入,顯示TabA
10-10 11:55:41.168: INFO/System.out(18368): AAAAAAAAAA____onCreate
10-10 11:55:41.168: INFO/System.out(18368): AAAAAAAAAA____onCreateView
10-10 11:55:41.175: INFO/System.out(18368): AAAAAAAAAA____onActivityCreated
10-10 11:55:41.179: INFO/System.out(18368): AAAAAAAAAA____onStart
10-10 11:55:41.179: INFO/System.out(18368): AAAAAAAAAA____onResume
10-10 11:55:44.980: INFO/System.out(18368): AAAAAAAAAA____onPause// 從TabA切換到TabB(TabA調用onPause)
10-10 11:55:44.980: INFO/System.out(18368): Extra---- 1 checked!!!
10-10 11:55:44.996: INFO/System.out(18368): BBBBBBBBBBB____onAttach
10-10 11:55:44.996: INFO/System.out(18368): BBBBBBBBBBB____onCreate
10-10 11:55:44.996: INFO/System.out(18368): BBBBBBBBBBB____onCreateView
10-10 11:55:45.004: INFO/System.out(18368): BBBBBBBBBBB____onActivityCreated
10-10 11:55:45.004: INFO/System.out(18368): BBBBBBBBBBB____onStart
10-10 11:55:45.004: INFO/System.out(18368): BBBBBBBBBBB____onResume
10-10 11:55:52.062: INFO/System.out(18368): BBBBBBBBBBB____onPause// 從TabB切換到TabC(TabB調用onPause)
10-10 11:55:52.062: INFO/System.out(18368): Extra---- 2 checked!!!
10-10 11:55:52.082: INFO/System.out(18368): CCCCCCCCCC____onAttach
10-10 11:55:52.082: INFO/System.out(18368): CCCCCCCCCC____onCreate
10-10 11:55:52.086: INFO/System.out(18368): CCCCCCCCCC____onCreateView
10-10 11:55:52.090: INFO/System.out(18368): CCCCCCCCCC____onActivityCreated
10-10 11:55:52.090: INFO/System.out(18368): CCCCCCCCCC____onStart
10-10 11:55:52.090: INFO/System.out(18368): CCCCCCCCCC____onResume
10-10 11:56:06.535: INFO/System.out(18368): CCCCCCCCCC____onPause// 從TabC切換到TabB(TabC調用onPause)
10-10 11:56:06.535: INFO/System.out(18368): BBBBBBBBBBB____onResume// 從TabC切換到TabB(TabB調用onResume)
10-10 11:56:06.535: INFO/System.out(18368): Extra---- 1 checked!!!
好了,到此為止,我們已經用Fragment實現了類似TabHost的功能了,下面來看下各個Fragment之間的通信
現在的情況是TabAFm中有個EditText,TabBFm中有個Button,MainActivity中有個變數「hello」
要做的是,切換到TabA,輸入「I'm TabA」,切換到B,點擊Button後,Toast顯示「hello I'm TabA」
MainActivity中沒什麼好說的,就一個hello變數:
public String hello = "hello ";
TabAFm在布局文件tab_a.xml中加個EditText,設置個id就可以了
TabBFm中:
View Code
// 獲得綁定的FragmentActivity
MainActivity activity = ((MainActivity)getActivity());
通過getActivity()即可得到Fragment所在的FragmentActivity
F. Android中想實現多個選項卡的切換,該如何實
Android中使用TabHost和TabWidget來實現選項卡功能。TabHost必須是布局的根節點,它包含兩個子節點:
TabWidget,顯示選項卡;
FrameLayout,顯示標簽內容。
實現選項卡功能有兩種方法,一種是將多個View放在同一個Activity中,然後使用使用標簽來進行切換。另一種是直接使用標簽切換不同的Activity。
後一種方法更為常用一些。
1. 創建一個工程,名字可以叫HelloTabWidget。
2. 創建多個不同的Activity,用來表示各個標簽頁中的不同內容。
3. 為標簽設計不同的icon。每個標簽應該有兩個icon,一個表示選中,一個未選中。將圖片放在 res/drawable/文件夾下。然後創建一個相應的
StateListDrawable,用來實現在選中和未選中直接自動的切換。
G. android中的tabHost怎樣在點擊一個選項卡後跳轉到一個activity,點擊另一個選項卡跳轉到另一個activity
一個Tab頁,中間有個按鈕可以跳轉到另一個Activity
我的TabHost是
intent = new Intent(this,Activity01.class);//新建一個Intent用作Tab1顯示的內容
spec = tabHost.newTabSpec("tab1")//新建一個 Tab
.setIndicator("tab1")//設置名稱以及圖標
.setContent(intent);//設置顯示的intent,這里的參數也可以是R.id.xxx
tabHost.addTab(spec);//添加進tabHost
這個方式添加進來的,載入Acitivity01
H. android開發中的tabhost標簽,怎麼實現點擊改變圖片。就像微信、微博最下面那一行那樣的效果。
使用RadioGroup,裡面放置一組RadioButton。然後設置RadioButton的屬性。
比如
提一點建議Tabhost已經過時了,現在一般都用fragment和viewpager
I. android tabhost 切換activity時有上一個頁面的頁面殘留
應該不會吧,TabHost自己切換Activity都不用程序員控制Intent,把Activity在Mainfest下注冊了就行。可以上圖或相關代碼看看嗎?