用Fragment的方法来实现传统的底部tabhost效果。
步骤:
1. 创建tabhost线性布局文件,以及每个fragment的布局文件;对每个tabitem都新建一个Fragment类,在类中重写onCreateView()方法,加载各fragment布局文件。
2. 在MainActivity中实例化各Fragment,并创建FragmentManager和FragmentTransaction的实例进行业务操作。大致如下:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
……
transaction.add(Id, Fragment)
……
transaction.commit();
部分方法:
transaction.add(Id, Fragment)
transaction.hide(Fragment)
transaction.show(Fragment)
下面是代码展示——
MainActivity.java
public class MainActivity extends FragmentActivity implements OnClickListener {
private LinearLayout mTabMap;
private LinearLayout mTabSpots;
private LinearLayout mTabFriends;
private LinearLayout mTabMore;
private Fragment mTab01;
private Fragment mTab02;
private Fragment mTab03;
private Fragment mTab04;
private FragmentManager fm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initView();
initEvent();
setSelect(0);
}
private void initView() {
mTabMap = (LinearLayout) findViewById(R.id.id_tab_map);
mTabSpots = (LinearLayout) findViewById(R.id.id_tab_spots);
mTabFriends = (LinearLayout) findViewById(R.id.id_tab_friends);
mTabMore = (LinearLayout) findViewById(R.id.id_tab_more);
}
private void initEvent() {
mTabMap.setOnClickListener(this);
mTabSpots.setOnClickListener(this);
mTabFriends.setOnClickListener(this);
mTabMore.setOnClickListener(this);
}
private void setSelect(int i) {
fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
hideFragment(transaction); //加载之前,先隐藏当前布局
switch (i) {
case 0:
if(mTab01 == null) { //如果第一次加载
mTab01 = new MapFragment(); //初始化
transaction.add(R.id.id_fragment_content, mTab01); //使用transaction.add()方法显示当前fragment
} else { //如果已经加载过
transaction.show(mTab01); //将加载过的页面显示
}
break;
case 1:
if(mTab02 == null) {
mTab02 = new SpotsFragment();
transaction.add(R.id.id_fragment_content, mTab02);
} else {
transaction.show(mTab02);
}
break;
case 2:
if(mTab03 == null) {
mTab03 = new FriendsFragment();
transaction.add(R.id.id_fragment_content, mTab03);
} else {
transaction.show(mTab03);
}
break;
case 3:
if(mTab04 == null) {
mTab04 = new MoreFragment();
transaction.add(R.id.id_fragment_content, mTab04);
} else {
transaction.show(mTab04);
}
break;
}
transaction.commit(); //最后不要忘记提交事务
}
private void hideFragment(FragmentTransaction transaction) {
if(mTab01 != null) {
transaction.hide(mTab01);
}
if(mTab02 != null) {
transaction.hide(mTab02);
}
if(mTab03 != null) {
transaction.hide(mTab03);
}
if(mTab04 != null) {
transaction.hide(mTab04);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_tab_map:
setSelect(0);
break;
case R.id.id_tab_spots:
setSelect(1);
break;
case R.id.id_tab_friends:
setSelect(2);
break;
case R.id.id_tab_more:
setSelect(3);
break;
}
}
}