FrameLayout布局切换不同的Fragment

一个底部切换按钮的APP框架。如果嫌麻烦可以使用Viewpager+Fragment实现。本次使用的是FrameLayout来实现切换功能。

布局如下:

图1布局

<?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 切换Fragment
图3 Fragment切换关键代码

上述 图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;

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容