一个底部切换按钮的APP框架。如果嫌麻烦可以使用Viewpager+Fragment实现。本次使用的是FrameLayout来实现切换功能。
布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/id_fl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/view_ll"/>
android:id="@+id/view_ll"
android:layout_width="match_parent"
android:layout_height="44dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true">
android:id="@+id/tv_index1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="第一个"/>
android:id="@+id/tv_index2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="第二个"/>
android:id="@+id/tv_index3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="第三个"/>
android:id="@+id/tv_index4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="第四个"/>
</RelativeLayout>
关键部分,切换tab。
上述 图2和图3 Fragment 切换展示部分。用的add() show()和show()来实现。isAdded:如果片段当前已添加到其活动中,则返回true。ft是FragmentTransaction,fragment是储存当前的Fragment,下一个要展示的Fragment与fragment做比较是否相同,是的话不做处理。免得重复add。比如说重复的点击同一个tag。
private TextViewtvIndex1,tvIndex2,tvIndex3,tvIndex4;
private FragmentTransactionft =null;
private Fragmentfragment =null;
//
private OneFragmentoneFragment;
private TwoFragmenttwoFragment;
private ThreeFragmentthreeFragment;
private FourFragmentfourFragment;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_activity);
initView();
initData();
}
private void initView(){
tvIndex1 = findViewById(R.id.tv_index1);
tvIndex2 = findViewById(R.id.tv_index2);
tvIndex3 = findViewById(R.id.tv_index3);
tvIndex4 = findViewById(R.id.tv_index4);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.tv_index1:
setSelection(0);
break;
case R.id.tv_index2:
setSelection(1);
break;
case R.id.tv_index3:
setSelection(2);
break;
case R.id.tv_index4:
setSelection(3);
break;
}
}
private void initData(){
setSelection(0);
tvIndex1.setOnClickListener(this);
tvIndex2.setOnClickListener(this);
tvIndex3.setOnClickListener(this);
tvIndex4.setOnClickListener(this);
}
private void setSelection(int index){
ft = getSupportFragmentManager().beginTransaction();
switch (index){
case 0:
if(oneFragment ==null){
oneFragment =new OneFragment();
}
switchContent(oneFragment,"one");
break;
case 1:
if(twoFragment ==null){
twoFragment =new TwoFragment();
}
switchContent(twoFragment,"two");
break;
case 2:
if(threeFragment ==null){
threeFragment =new ThreeFragment();
}
switchContent(threeFragment,"three");
break;
case 3:
if(fourFragment ==null){
fourFragment =new FourFragment();
}
switchContent(fourFragment,"four");
break;
}
}
private void switchContent(Fragment to, String tag){
if(fragment!=null){
if(to !=fragment){
if(!to.isAdded()){
//隐藏当前的fragment,将 下一个fragment 添加进去
ft.hide(fragment).add(R.id.id_fl, to, tag).commit();
}else {
// 加载过,隐藏当前的fragment,直接显示下一个fragment
ft.hide(fragment).show(to).commit();
}
}
}else {
ft.add(R.id.id_fl, to, tag).commit();
}
fragment = to;
}