Fragment的应用相当之广泛,现在我们来看一下Fragment和ActionBar的结合使用。
MainActivity.java代码:
public class MainActivity extends Activity {
/* 定义actionBar */
private ActionBar actionBar;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 获取ActionBar对象 */
actionBar = this.getActionBar();
/* 设置ActionBar的导航模式 */
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
/**
* 创建选项卡
*/
actionBar.addTab(actionBar.newTab().setText("系统管理")
.setIcon(getResources().getDrawable(R.drawable.ic_launcher))
.setTabListener(new MyTabListener())
.setTag(1));
actionBar.addTab(actionBar.newTab().setText("用户管理")
.setIcon(getResources().getDrawable(R.drawable.ic_launcher))
.setTabListener(new MyTabListener())
.setTag(2));
actionBar.addTab(actionBar.newTab()
.setText("产品管理")
.setIcon(getResources().getDrawable(R.drawable.ic_launcher))
.setTabListener(new MyTabListener())
.setTag(3));
}
/**
* 设置Tab的监听事件
*/
public class MyTabListener implements ActionBar.TabListener {
/* 这个方法表示操作栏被选中的事件 */
public void onTabSelected(Tab tab, FragmentTransaction ft) {
/* 获取Tab的标志 */
int tag = Integer.parseInt(tab.getTag().toString());
/**
* 注:这里不能使用addToBackStake方法和commit方法否则会出错
*/
switch (tag) {
case 1:
ft.replace(R.id.main, new FragmentA(), "fragment1");
break;
case 2:
ft.replace(R.id.main, new FragmentB(), "fragment2");
break;
case 3:
ft.replace(R.id.main, new FragmentC(), "fragment3");
break;
default:
break;
}
}
@Override
public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
FragmentA.java代码:
public class FragmentA extends Fragment {
public FragmentA() {
// TODO Auto-generated constructor stub
}
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.f1, null);
return view;
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
FragmentB.java、FragmentC.java的代码与FragmentA基本相同!
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
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" >
</RelativeLayout>
f1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
f2.xml、f3.xml的代码和f1.xml代码基本相同。