package com.example.myactionbardemo2; import android.os.Bundle; import android.app.ActionBar; import android.app.Fragment; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.FragmentTransaction; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; //展現了actionbar的tab模式和list模式。 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar=getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); Tab tab1=actionBar.newTab(); tab1.setText("tab1"); //必須添加監聽器,不然會報錯 //MyTabListener的設置能夠使每一個tab使用本身的監聽器,顯示本身不一樣的fragment裏的內容 tab1.setTabListener(new MyTabListener<MyFragment1>(MyFragment1.class, this,R.id.container)); Tab tab2=actionBar.newTab(); tab2.setText("tab1"); tab2.setTabListener(new MyTabListener<MyFragment2>(MyFragment2.class, this,R.id.container)); Tab tab3=actionBar.newTab(); tab3.setText("tab1"); tab3.setTabListener(new MyTabListener<MyFragment3>(MyFragment3.class, this,R.id.container)); actionBar.addTab(tab1); actionBar.addTab(tab2); actionBar.addTab(tab3); Button button=(Button) findViewById(R.id.but); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(getApplicationContext(), OtherActivity.class); startActivity(intent); } }); } class MyTabListener<T extends Fragment> implements TabListener{ Class<T> fragmentClass; Activity activity; int container; Fragment fragment; public MyTabListener(Class<T> fragmentClass, Activity activity, int container) { super(); this.fragmentClass = fragmentClass; this.activity = activity; this.container = container; } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub if (fragment==null) { //fragment.getName返回的是包名+各自fragment的名字 fragment=Fragment.instantiate(activity, fragmentClass.getName(),null); //把fragment加入到activity中,該fragment能夠有界面(在onCreateView生成),也能夠返回空無界面 ft.add(container, fragment); }else { ft.attach(fragment); } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub if (fragmentClass!=null) { ft.detach(fragment); } } /*actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); ArrayList<CharSequence> list=new ArrayList<CharSequence>(); list.add("item1"); list.add("item2"); ArrayAdapter<CharSequence> adapter=new ArrayAdapter<CharSequence>(getApplicationContext(), android.R.layout.simple_list_item_1, list); actionBar.setListNavigationCallbacks(adapter, new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // TODO Auto-generated method stub switch (itemPosition) { case 0: Toast.makeText(getApplicationContext(), "item1",1000).show(); break; case 1: Toast.makeText(getApplicationContext(), "item2",1000).show(); break; } return true; } });*/ /*actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(false);*/ } }
package com.example.myactionbardemo2; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.MenuItem; public class OtherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); //當放回父activity時使用 ActionBar actionBar=getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); //其單擊處理事件在onOptionsItemSelected裏。 actionBar.setHomeButtonEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case android.R.id.home: Intent intent=new Intent(this,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); break; } return true; } }
當在actionbar的不一樣tab進行切換時,進行fragment的切換,xml代碼以下 java
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <FrameLayout android:id="@+id/container" android:layout_width="wrap_content" android:layout_height="wrap_content" ></FrameLayout> <Button android:id="@+id/but" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="點擊跳轉" android:layout_below="@id/container"/> </RelativeLayout>
注意是在主界面佈局中使用的framelayout標籤進行fragment的生成切換。 android