Fragment是我们Android开发中非常常用的一个类,很多时候我们需要做几个页面在一个activity中,点击不同的button来进行切换,但是如果不像微信那样滑动的话,要像qq那样子点击才能切换,这时候我们避免点击切换不同的Fragment而重新走onCreateView,因为那样不仅影响我们的效率,还浪费用户的流量,我们得做一些处理,好像也叫做懒加载。废话不多说,上代码要紧
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.main_home_layout:
if (currentFragment!=mHomeFragment){
//将所有图片和字体颜色还原
reset();
replaceFragment(newHomeFragment());
currentFragment=newHomeFragment();
//再设置选中图片和选中的字体颜色
mHomeImage.setImageResource(R.mipmap.ic_main_home_p); mHomeText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
}
break;
case R.id.main_home_server:
if (currentFragment!=mServerFragment){
reset();
replaceFragment(newServerFragment());
currentFragment=newServerFragment();
mServerImage.setImageResource(R.mipmap.ic_main_server_p);
mServerText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
}
case R.id.main_home_fanli:
reset();
replaceFragment(newFanliFragment());
currentFragment=newFanliFragment();
mFanliText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
break;
case R.id.main_home_message:
if (currentFragment!=mMessageFragment){
reset();
replaceFragment(newMessageFragment());
currentFragment=newMessageFragment();
mMessageImage.setImageResource(R.mipmap.ic_main_message_p);
mMessageText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
}
break;
case R.id.main_home_mine:
if (currentFragment!=mMineFragment) {
reset();
replaceFragment(newMineFragment());
currentFragment = newMineFragment();
mMineImage.setImageResource(R.mipmap.ic_main_mine_p);
mMineText.setTextColor(getResources().getColor(R.color.main_item_text_color_p));
}
break;
case R.id.main_download:
startActivity(new Intent(this,DownloadActivity.class));
break;
}
}
/**
* 重置各个item
*/
private void reset() {
mMineImage.setImageResource(R.mipmap.ic_main_mine);
mMessageImage.setImageResource(R.mipmap.ic_main_message);
mServerImage.setImageResource(R.mipmap.ic_main_server);
mHomeImage.setImageResource(R.mipmap.ic_main_home);
mMineText.setTextColor(getResources().getColor(R.color.main_item_text_color));
mServerText.setTextColor(getResources().getColor(R.color.main_item_text_color));
mMessageText.setTextColor(getResources().getColor(R.color.main_item_text_color));
mHomeText.setTextColor(getResources().getColor(R.color.main_item_text_color));
mFanliText.setTextColor(getResources().getColor(R.color.main_item_text_color));
}
private Fragment mHomeFragment;
private Fragment mMineFragment;
private Fragment mServerFragment;
private Fragment mMessageFragment;
private Fragment mFanliFragment;
private Fragment currentFragment;
//主要是这个方法,判断有没有添加过,有的话显示,没有的话先添加
public void replaceFragment(Fragment fragment){
if (mFragmentManager==null){
mFragmentManager = getFragmentManager();
}
FragmentTransaction transaction = mFragmentManager.beginTransaction();
if (fragment.isAdded()){
transaction.show(fragment);
}else{
transaction.add(R.id.main_frame_layout,fragment);
}
if (currentFragment!=null){
transaction.hide(currentFragment);
}
currentFragment=fragment;
transaction.commit();
}
//判断各个页面的fragment是否加载过,如果没有则new出来
private Fragment newHomeFragment() {
if (mHomeFragment == null) {
mHomeFragment = new HomeFragment();
return mHomeFragment;
} else {
return mHomeFragment;
}
}
private Fragment newMineFragment() {
if (mMineFragment==null) {
mMineFragment=new MineFragment();
return mMineFragment;
}else {
return mMineFragment;
}
}
private Fragment newServerFragment() {
if (mServerFragment == null) {
mServerFragment = new ServerFragment();
return mServerFragment;
} else {
return mServerFragment;
}
}
private Fragment newMessageFragment() {
if (mMessageFragment == null) {
mMessageFragment = new MessageFragment();
return mMessageFragment;
} else {
return mMessageFragment;
}
}
private Fragment newFanliFragment() {
if (mFanliFragment == null) {
mFanliFragment = new FanliFragment();
return mFanliFragment;
} else {
return mFanliFragment;
}
}
应该没有问题,如果有什么不懂的欢迎提问,虽然楼主不一定能够解答哈哈