久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

tabhost 的用法(懂了這些tabhost 與fragment 連用 就會(huì) 木有問(wèn)題)

 herozhou1314 2012-10-09

TabActivity中子Activity相互跳轉(zhuǎn),,及某個(gè)Tab需彈出窗的解決方案

在iphone開發(fā)中貌似有個(gè)UITabBarController,,(我以為是toolbar,,四樓的兄弟更正的),,UITabBarController在底部,,也有對(duì)應(yīng)的切換效果,,都封裝好了,。但是在android的中,這個(gè)東西它在頂部,。,。。我也不明白為什么這么設(shè)計(jì),,標(biāo)新立異,?我覺(jué)得在底部方便很多,我們的設(shè)計(jì)也是這樣設(shè)計(jì)的,,所以我也只有改咯,。

個(gè)人認(rèn)為設(shè)計(jì)不太好的tabhost,單手拿手機(jī)不好操作,,不過(guò)下面有個(gè)兄弟提醒因?yàn)橛衜enu的存在,,呵呵,我光想不方便了,。

整體的思想就是不進(jìn)行startactivity,,而是通過(guò)廣播發(fā)送數(shù)據(jù),發(fā)送之前切換到對(duì)應(yīng)的tab,。從而避免很多startactivity出現(xiàn)的麻煩,,比如tabwidget不見(jiàn)了,跳轉(zhuǎn)黑屏等等,。,。。彈出窗可以獲取到tabwidget對(duì)應(yīng)的標(biāo)簽位置,,設(shè)置其監(jiān)聽(tīng)事件,,阻塞掉原本tabwidget的切換就可以了。

先把這些tab挪到底部去,。布局代碼如下:

 

復(fù)制代碼
<TabHost xmlns:android="http://schemas./apk/res/android"
    android:id="@android:id/tabhost"
   android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
<FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent"
    android:layout_height="0dip" android:layout_weight="1" />
<TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent"
    android:layout_height="wrap_content" /> </LinearLayout> </TabHost>
復(fù)制代碼

注意每個(gè)控件的相對(duì)位置,,位置對(duì)了,那個(gè)鬼東西才能跑底部去,,自定義的tabhost就是如此了,。。,。

 

然后上代碼,。。,。
public class TabManager extends TabActivity
網(wǎng)上很多人說(shuō)不要繼承tabactivity,,否則不能自定義tabhost,但在這就是這樣做了,,也沒(méi)錯(cuò),。還是自己實(shí)踐比較好,,別盲目轉(zhuǎn)帖。
有人提醒的,,多謝:樓主誤解了,,其實(shí)網(wǎng)上說(shuō)的是不能繼承tabactivity,否則不能自定義tabhost名,。 你這邊繼承了Tabactivity,, 同時(shí)布局文件中又用了android:id="@android:id/tabhost" ,,所以你沒(méi)錯(cuò),。你可以改下這個(gè)ID試試,一改就錯(cuò)了,。 如果想要自定義這個(gè)ID,,就不能繼承TabActivity。
我也沒(méi)試了,,大家有空去試試,。。,。
復(fù)制代碼
Constant.tabHost = (TabHost) findViewById(android.R.id.tabhost);
 LayoutInflater.from(this).inflate(R.layout.tabcontent,
 Constant.tabHost.getTabContentView(), true);
 tabWidget = Constant.tabHost.getTabWidget();
 Constant.tabHost.addTab(Constant.tabHost.newTabSpec("tab1")
 .setIndicator("Tab1",th.getResources().getDrawable(R.drawable.ic_menu_home_tab)).setContent(new Intent(this, Tab1.class)));
 
復(fù)制代碼

 

復(fù)制代碼
View v = tabWidget.getChildAt(i);
// 設(shè)置tab背景顏色 外層有個(gè)循環(huán),,每個(gè)tab都要設(shè)置一次
v.setBackgroundResource(R.drawable.tab_indicator);
 
tab_indicator文件:
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas./apk/res/android">
 <!-- Non focused states -->
 <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@color/tab_unselected" />
 <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@color/tab_selected" />
 <!-- Focused states -->
 <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@color/tab_focus" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@color/tab_focus" />
 <!-- Pressed -->
 <item android:state_pressed="true" android:drawable="@color/tab_press"/>
 </selector>
 
復(fù)制代碼

下面是彈出窗口的

View view = tabWidget.getChildAt(4);
 
view.setOnClickListener(new OnClickListener() {

獲取到你要彈出窗口的標(biāo)簽,設(shè)置setOnClickListener事件,,就可以阻塞掉tabhost原本的事件,。達(dá)到彈出窗口的效果。

Constant.tabHost = (TabHost) findViewById(android.R.id.tabhost);
Constant.tabHost.setCurrentTab(0);跳轉(zhuǎn)就可以是這樣做了,。
Constant.tabHost 是全局變量,,這個(gè)是關(guān)鍵,為了切換tab不會(huì)出現(xiàn)黑屏跳轉(zhuǎn)效果,。

 

復(fù)制代碼
txTextView.setText("點(diǎn)擊切換到tab3");
 
txTextView.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
 Constant.tabHost.setCurrentTab(2);//這里是全局變量的tabhost
 Intent intent = new Intent("com.niushu.recbroad");
 intent.putExtra("id","從tab1過(guò)來(lái)的牛叔");
 Tab1.this.sendBroadcast(intent);
 }
 
});
復(fù)制代碼

 

這個(gè)是在tab1中點(diǎn)擊文字,,首先切換到對(duì)應(yīng)的tab,Constant.tabHost.setCurrentTab(2);,,啟動(dòng)對(duì)應(yīng)的activity,,然后發(fā)送廣播。用這個(gè)方Constant.tabHost.setCurrentTab切換,,就沒(méi)有那些亂七八糟的麻煩,。
如果發(fā)送廣播過(guò)去之后,接下來(lái)要用線程操作的話,,最好在建一個(gè)標(biāo)志位,,全局變量的。避免一些線程跟廣播資源之間的沖突,。
下面是接受廣播的代碼:需要注意在生命周期方法中注冊(cè)和注銷廣播接收器

 

復(fù)制代碼
public class Broad extends BroadcastReceiver {
 
@Override
 public void onReceive(Context context, Intent intent) {
 disid_Broad = intent.getStringExtra("id");
 Toast.makeText(Tab3.this, disid_Broad, 1).show();
 Log.i("Broad", "onReceive");
 }
 }
復(fù)制代碼

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約