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">
<FrameLayout
android:id="@+id/mMainLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:background="@color/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_star"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_star"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tv_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="星球"
android:textColor="@android:color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_square"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_square"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tv_square"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="广场"
android:textColor="@android:color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_chat"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_chat"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tv_chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="聊天"
android:textColor="@android:color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_me"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_me"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tv_me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的"
android:textColor="@android:color/white" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
/*
*不会重新走生命周期,来回切换不会重新创建
*/
public class MainActivity extends BaseUIActivity implements View.OnClickListener{
//星球
private ImageView ivStar;
private TextView tvStar;
private LinearLayout llStar;
private StarFragment mStarFragment=null;
private FragmentTransaction mStartTransaction=null;
//广场
private LinearLayout llSquare;
private ImageView ivSquare;
private TextView tvSquare;
private SquareFragment mSquareFragment=null;
private FragmentTransaction mSquareTransaction=null;
//聊天
private LinearLayout llChat;
private ImageView ivChat;
private TextView tvChat;
private ChatFragment mChatFragment=null;
private FragmentTransaction mChatTransaction=null;
//我的
private LinearLayout llMe;
private ImageView ivMe;
private TextView tvMe;
private MeFragment mMeFragment=null;
private FragmentTransaction mMeTransaction=null;
/**
* 1.初始化Fragment
* 2.显示Fragment
* 3.隐藏Fragment
* 4.回复Fragment
* 优化的手段
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**
* 初始化View
*/
private void initView() {
llStar = (LinearLayout) findViewById(R.id.ll_star);
ivStar = (ImageView) findViewById(R.id.iv_star);
tvStar = (TextView) findViewById(R.id.tv_star);
llSquare = (LinearLayout) findViewById(R.id.ll_square);
ivSquare = (ImageView) findViewById(R.id.iv_square);
tvSquare = (TextView) findViewById(R.id.tv_square);
llChat = (LinearLayout) findViewById(R.id.ll_chat);
ivChat = (ImageView) findViewById(R.id.iv_chat);
tvChat = (TextView) findViewById(R.id.tv_chat);
llMe = (LinearLayout) findViewById(R.id.ll_me);
ivMe = (ImageView) findViewById(R.id.iv_me);
tvMe = (TextView) findViewById(R.id.tv_me);
llChat.setOnClickListener(this);
llStar.setOnClickListener(this);
llSquare.setOnClickListener(this);
llMe.setOnClickListener(this);
//设置文本
tvStar.setText("星球");
tvSquare.setText("广场");
tvChat.setText("聊天");
tvMe.setText("我的");
initFragment();//初始化Fragment
//切换默认的选项卡
checkMainTab(0);
}
/**
* 初始化Fragment
*/
private void initFragment() {
//星球
if (mStarFragment==null){
mStarFragment=new StarFragment();
mStartTransaction=getSupportFragmentManager().beginTransaction();
mStartTransaction.add(R.id.mMainLayout,mStarFragment);
mStartTransaction.commit();
}
//广场
if (mSquareFragment==null){
mSquareFragment=new SquareFragment();
mSquareTransaction=getSupportFragmentManager().beginTransaction();
mSquareTransaction.add(R.id.mMainLayout,mSquareFragment);
mSquareTransaction.commit();
}
//聊天
if (mChatFragment==null){
mChatFragment=new ChatFragment();
mChatTransaction=getSupportFragmentManager().beginTransaction();
mChatTransaction.add(R.id.mMainLayout,mChatFragment);
mChatTransaction.commit();
}
//我的
if (mMeFragment==null){
mMeFragment=new MeFragment();
mMeTransaction=getSupportFragmentManager().beginTransaction();
mMeTransaction.add(R.id.mMainLayout,mMeFragment);
mMeTransaction.commit();
}
}
/**
* 显示Fragment
* @param fragment
*/
private void showFragment(Fragment fragment){
if (fragment!=null){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
hideAllFragment(transaction);//隐藏全部Fragment
transaction.show(fragment);
transaction.commitAllowingStateLoss();
}
}
/**
* 隐藏所有的Fragment
* @param transaction
*/
private void hideAllFragment(FragmentTransaction transaction){
if (mStarFragment!=null){
transaction.hide(mStarFragment);
}
if (mSquareFragment!=null){
transaction.hide(mSquareFragment);
}
if (mChatFragment!=null){
transaction.hide(mChatFragment);
}
if (mMeFragment!=null){
transaction.hide(mMeFragment);
}
}
/**
* 切换主页选项卡
* @param index
* 0:星球
* 1:广场
* 2:聊天
* 3:我的
*/
private void checkMainTab(int index){
switch (index){
case 0:
showFragment(mStarFragment);
//设置Tab切换图片
ivStar.setImageResource(R.drawable.img_star_p);
ivSquare.setImageResource(R.drawable.img_square);
ivChat.setImageResource(R.drawable.img_chat);
ivMe.setImageResource(R.drawable.img_me);
//设置Tab文本颜色
tvStar.setTextColor(Color.BLUE);
tvSquare.setTextColor(Color.BLACK);
tvChat.setTextColor(Color.BLACK);
tvMe.setTextColor(Color.BLACK);
break;
case 1:
showFragment(mSquareFragment);
ivStar.setImageResource(R.drawable.img_star);
ivSquare.setImageResource(R.drawable.img_square_p);
ivChat.setImageResource(R.drawable.img_chat);
ivMe.setImageResource(R.drawable.img_me);
tvStar.setTextColor(Color.BLACK);
tvSquare.setTextColor(Color.BLUE);
tvChat.setTextColor(Color.BLACK);
tvMe.setTextColor(Color.BLACK);
break;
case 2:
showFragment(mChatFragment);
ivStar.setImageResource(R.drawable.img_star);
ivSquare.setImageResource(R.drawable.img_square);
ivChat.setImageResource(R.drawable.img_chat_p);
ivMe.setImageResource(R.drawable.img_me);
tvStar.setTextColor(Color.BLACK);
tvSquare.setTextColor(Color.BLACK);
tvChat.setTextColor(Color.BLUE);
tvMe.setTextColor(Color.BLACK);
break;
case 3:
showFragment(mMeFragment);
ivStar.setImageResource(R.drawable.img_star);
ivSquare.setImageResource(R.drawable.img_square);
ivChat.setImageResource(R.drawable.img_chat);
ivMe.setImageResource(R.drawable.img_me_p);
tvStar.setTextColor(Color.BLACK);
tvSquare.setTextColor(Color.BLACK);
tvChat.setTextColor(Color.BLACK);
tvMe.setTextColor(Color.BLUE);
break;
}
}
/**
* 防止重叠
* 当应用的内存紧张的时候,系统会回收掉Fragment对象
* 再一次进入的时候会重新创建Fragment
* 非原来的对象,我们无法控制,导致重叠
* @param fragment
*/
@Override
public void onAttachFragment(@NonNull @NotNull Fragment fragment) {
if (mStarFragment!=null&&fragment instanceof StarFragment){
mStarFragment= (StarFragment) fragment;
}
if (mSquareFragment!=null&&fragment instanceof SquareFragment){
mSquareFragment= (SquareFragment) fragment;
}
if (mChatFragment!=null&&fragment instanceof ChatFragment){
mChatFragment= (ChatFragment) fragment;
}
if (mMeFragment!=null&&fragment instanceof MeFragment){
mMeFragment= (MeFragment) fragment;
}
}
//点击事件
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.ll_star:
checkMainTab(0);
break;
case R.id.ll_square:
checkMainTab(1);
break;
case R.id.ll_chat:
checkMainTab(2);
break;
case R.id.ll_me:
checkMainTab(3);
break;
}
}
}