tabHost的简略使用以及registerReceiver和Handler的使用

tabHost的简单使用以及registerReceiver和Handler的使用

tabHost有点像listView 也有TabActivity或者activity发动

那么看一下Activity发动

 class SelfContainedTabHost extends Activity
setContentView(R.layout.tabhost_container);
        
        TabHost tabs = (TabHost)this.findViewById(R.id.tabhost);
        tabs.setup();
        
      
       
        tabs.addTab(tabs.newTabSpec("one").setContent(R.id.tab1content).setIndicator("TAB 1"));
        tabs.addTab(tabs.newTabSpec("two").setContent(R.id.tab2content).setIndicator("TAB 2"));
        tabs.setCurrentTab(0);

 前两部是必须的,在xml中也需要一个

<TabWidget
    		android:id="@android:id/tabs"
        	android:layout_width="fill_parent"
        	android:layout_height="60px"
        
        	android:paddingBottom="10dip"/>

 

注意他的id android:id/tabs。

整个xml为

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TabHost
    	android:id="@+id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
  
  <TabWidget
    		android:id="@android:id/tabs"
        	android:layout_width="fill_parent"
        	android:layout_height="60px"
        
        	android:paddingBottom="10dip"/>
    	
    	<FrameLayout
    		android:id="@android:id/tabcontent"
        	android:layout_width="fill_parent"
        	android:layout_height="fill_parent"
        	android:paddingTop="60px">


			<LinearLayout
				android:id="@+id/tab1content"
				android:orientation="vertical"
				android:layout_width="fill_parent"
				android:layout_height="fill_parent"
				android:background="#00008B">
			
				<!--  Put Tab 1 Views in here -->
				
			</LinearLayout>

			<LinearLayout
				android:id="@+id/tab2content"
				android:orientation="vertical"
				android:layout_width="fill_parent"
				android:layout_height="fill_parent"
				android:background="#FFFF00">

				<!--  Put Tab 2 Views in here -->
				
			</LinearLayout>
			
			
		</FrameLayout>
		
	</TabHost>			
</LinearLayout>

 

2.tabActivity

public class Container extends TabActivity{

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		host = getTabHost();
		Intent intent = new Intent(this, Tab1Activity.class);
		host.addTab(host.newTabSpec("one").setIndicator("TAB1").setContent(intent));
		intent = new Intent(this, Tab2Activity.class);
		host.addTab(host.newTabSpec("two").setIndicator("TAB2").setContent(intent));
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		receiver = new TabChangeReceiver();
		registerReceiver(receiver, new IntentFilter("com.novoda.TAB"), null, mHandler);
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		unregisterReceiver(receiver);
	};
	
    protected Handler mHandler = new Handler() {
        @Override public void handleMessage(Message msg) {
            switch (msg.what) {
            	case SWITCH_TAB:
            		Log.i("handler", "using the handler");
                    host.setCurrentTab(msg.arg1);            		
            		break;
            }
        }
    };

    public class TabChangeReceiver extends android.content.BroadcastReceiver{
		@Override
		public void onReceive(Context context, Intent intent) {
			int intExtra = intent.getIntExtra("tab", 0);
			Log.i(TabChangeReceiver.class.getSimpleName(), "Recieved broadcast with extra=[" + intExtra + "]");
			
			mHandler.sendMessage(mHandler.obtainMessage(SWITCH_TAB, intExtra, 0));
		}
	}
	
	private TabHost host;
	public static final int SWITCH_TAB = 2545;
	protected static TabChangeReceiver receiver;
	
}

 

public class Tab1Activity extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        setContentView(R.layout.tab1);
        findViewById(R.id.tab1button).setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent intent = new Intent("com.novoda.TAB");
				intent.putExtra("tab", 1);
				sendBroadcast(intent);
			}
		});
	}
}