用Fragment实现tabhost的切换效果

要达到切换效果有几种方式:
1、可以在布局使用FragmentTabHost,TabWidget这种办法;
2、也可以只在Activity中布局下面的页卡按钮,切换的内容用fragment来替换,替换的时候如果调用replace()方法,则fragment的状态在切换后是不能保存的,例如:如果有输入框,输入了一段字符,再切换到其他fragment,再切换回来,则原来输入的字符没有了。因为replace()方法是先remove掉原来的fragment,再add一个fragment,所以不能保存fragment原来的状态。如果要保存原来的状态,就用add()方法来添加fragment,再用FragmentTransaction来隐藏和显示fragment。

(一)Activity的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RadioGroup
        android:id="@+id/fragment_hide_radiogroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/fragment_hide_radiobtn_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="tab1"
            android:checked="true"
            android:layout_weight="1"
            android:button="@null"
            android:layout_marginLeft="60dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:textSize="20sp"/>

        <RadioButton
            android:id="@+id/fragment_hide_radiobtn_two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="tab2"
            android:layout_weight="1"
            android:button="@null"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:textSize="20sp"/>

        <RadioButton
            android:id="@+id/fragment_hide_radiobtn_three"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="tab3"
            android:layout_weight="1"
            android:button="@null"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:textSize="20sp"/>

    </RadioGroup>

    <FrameLayout
        android:id="@+id/fragment_hide_framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/fragment_hide_radiogroup"></FrameLayout>

</RelativeLayout>

(二)随意创建三个fragment类,布局也随意。

(三)Activity中的代码

public class TabFragment_hide_show_Activity extends AppCompatActivity {
    private RadioGroup mRadioGroup;
    private FirstHideFragment firstHideFragment;//声明自定义的fragment
    private SecondHideFragment secondHideFragment;
    private ThirdHideFragment thirdHideFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tab_fragment_hide_show_);

        mRadioGroup = (RadioGroup) findViewById(R.id.fragment_hide_radiogroup);
        if (firstHideFragment == null) {
            firstHideFragment = FirstHideFragment.newInstance();//实例化fragment
        }
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_hide_framelayout, firstHideFragment).commit();

//监听页卡选项按钮
        mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                hideFragment(fragmentTransaction);//调用此方法来隐藏所有的fragment
                switch (checkedId) {
                    case R.id.fragment_hide_radiobtn_one:
                        fragmentTransaction.show(firstHideFragment);
                        break;
                    case R.id.fragment_hide_radiobtn_two:
                        if (secondHideFragment == null) {
                            secondHideFragment = SecondHideFragment.newInstance();//实例化fragment
                            fragmentTransaction.add(R.id.fragment_hide_framelayout, secondHideFragment);
                        }else{
                            fragmentTransaction.show(secondHideFragment);
                        }
                        break;
                    case R.id.fragment_hide_radiobtn_three:
                        if (thirdHideFragment == null) {
                            thirdHideFragment = ThirdHideFragment.newInstance();
                            fragmentTransaction.add(R.id.fragment_hide_framelayout, thirdHideFragment);
                        }else{
                            fragmentTransaction.show(thirdHideFragment);
                        }
                        break;
                }
                fragmentTransaction.commit();
            }
        });
    }

    /**
     * 隐藏所有的fragment
     * @param fragmentTransaction
     */
    public void hideFragment(FragmentTransaction fragmentTransaction) {
        if (firstHideFragment != null) {
            fragmentTransaction.hide(firstHideFragment);
        }
        if (secondHideFragment != null) {
            fragmentTransaction.hide(secondHideFragment);
        }
        if (thirdHideFragment != null) {
            fragmentTransaction.hide(thirdHideFragment);
        }
    }
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值