RadioGroup+Fragment

先看布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">

    <!--外部添加距离底部的属性   -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/tab_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <RadioGroup
            android:id="@+id/ll_bottom"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_alignParentBottom="true"
            android:layout_gravity="center"
            android:background="#f2ffffff"
            android:gravity="center"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/btn_find"
                style="@style/rediobutton_main_style"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="true"
                android:drawablePadding="5dp"
                android:drawableTop="@drawable/rediobutton_drawable_discovery_style"
                android:gravity="center"
                android:text="@string/menu_find" />


            <RadioButton
                android:id="@+id/btn_project"
                style="@style/rediobutton_main_style"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawableTop="@drawable/rediobutton_drawable_project_style"
                android:gravity="center"
                android:text="@string/menu_project" />

            <RadioButton
                android:id="@+id/btn_investor"
                style="@style/rediobutton_main_style"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawableTop="@drawable/rediobutton_drawable_investor_style"
                android:gravity="center"
                android:text="@string/menu_investor" />

            <RadioButton
                android:id="@+id/btn_mine"
                style="@style/rediobutton_main_style"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawableTop="@drawable/rediobutton_drawable_mine_style"
                android:text="@string/menu_mine" />


        </RadioGroup>


        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_above="@id/ll_bottom"
            android:background="@color/text_color_aaaaaa" />


    </RelativeLayout>


</LinearLayout>

注意细节,RadioButton里面的样式 都是一样的,统一写到样式文件中

<style name="rediobutton_main_style">
        <item name="android:gravity">center</item>
        <item name="android:button">@null</item>
        <item name="android:textSize">10sp</item>
        <item name="android:drawablePadding">5dp</item>
        <item name="android:textColor">@color/color_radiobutton</item>
        注意这个有点击有波纹效果,5.0以上的手机使用的
        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
        5.0一下的手机使用的
        <item name="android:background">@null</item>
</style>

这个是点击的radioButton的样式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_checked="false"
        android:drawable="@drawable/home_discover_normal" />
    <item
        android:state_checked="true"
        android:drawable="@drawable/home_discover_selected" />
</selector>


这个是字体的点击变色状态
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/bg_ff3d00"/>
    <item android:color="@color/text_color_cccccc"/>
</selector>

下面写MainActiviyty里面的东西了

@Bind(R.id.ll_bottom)
RadioGroup ll_bottom_radio;

private List<Fragment> mListFragments = new ArrayList<Fragment>();

private void initViewPagerDate() {
        mListFragments.add(Fragment.instantiate(this, FragmentB.class.getName()));
        mListFragments.add(Fragment.instantiate(this, FragmentA.class.getName()));
        mListFragments.add(Fragment.instantiate(this, FragmentC.class.getName()));
        mListFragments.add(Fragment.instantiate(this, FragmentD.class.getName()));
        new FragmentTabHelper(this, mListFragments, R.id.tab_content, ll_bottom_radio);
        提供监听方法
        tabAdapter.setOnRgsExtraCheckedChangedListener(new FragmentTabHelper.OnRgsExtraCheckedChangedListener() {
            @Override
            public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index) {
            }
        });


    }

我们将radioGroup+fragment的具体处理放到FragmentTabHelper类中统一管理

public class FragmentTabHelper implements RadioGroup.OnCheckedChangeListener {


    private List<Fragment> fragments; // 一个tab页面对应一个Fragment
    private RadioGroup rgs; // 用于切换tab
    private FragmentActivity fragmentActivity;
    private int fragmentContentId;
    private int currentTab; // 当前Tab页面索引
    private OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener;


    public FragmentTabHelper(FragmentActivity fragmentActivity, List<Fragment> fragments, int fragmentContentId, RadioGroup rgs) {
        this.fragments = fragments;
        this.rgs = rgs;
        this.fragmentActivity = fragmentActivity;
        this.fragmentContentId = fragmentContentId;

        // 默认显示第一页
        FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
        ft.add(fragmentContentId, fragments.get(0));
        ft.commit();
        rgs.setOnCheckedChangeListener(this);
    }


    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        for (int i = 0; i < rgs.getChildCount(); i++) {
            if (rgs.getChildAt(i).getId() == checkedId) {
                Fragment fragment = fragments.get(i);
                FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
                if (fragment.isAdded()) {
                    fragment.onResume();
                } else {
                    ft.add(fragmentContentId, fragment);
                }
                showTab(i);
                ft.commit();
                // 如果设置了切换tab功能接口
                if (null != onRgsExtraCheckedChangedListener) {
                    onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(radioGroup, checkedId, i);
                }

            }
        }
    }

    public int getCurrentTab() {
        return currentTab;
    }

    public Fragment getCurrentFragment() {
        return fragments.get(currentTab);
    }

    public OnRgsExtraCheckedChangedListener getOnRgsExtraCheckedChangedListener() {
        return onRgsExtraCheckedChangedListener;
    }

    public void setOnRgsExtraCheckedChangedListener(OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener) {
        this.onRgsExtraCheckedChangedListener = onRgsExtraCheckedChangedListener;
    }


    /**
     * 切换tab
     *
     * @param idx
     */
    private void showTab(int idx) {
        for (int i = 0; i < fragments.size(); i++) {
            Fragment fragment = fragments.get(i);
            FragmentTransaction ft = obtainFragmentTransaction(idx);

            if (idx == i) {
                ft.show(fragment);
            } else {
                ft.hide(fragment);
            }
            ft.commit();
        }
        currentTab = idx; // 更新目标tab为当前tab
    }


    /**
     * 获取一个带动画的FragmentTransaction
     *
     * @param index
     * @return
     */
    private FragmentTransaction obtainFragmentTransaction(int index) {
        FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
        // 设置切换动画
//        if(index > currentTab){
//            ft.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out);
//        }else{
//            ft.setCustomAnimations(R.anim.slide_right_in, R.anim.slide_right_out);
//        }
        return ft;
    }


    /**
     * 切换tab额外功能功能接口
     */
   public static class OnRgsExtraCheckedChangedListener {
        public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index) {

        }
    }


}

Ok至此完成,需要demo的
http://download.csdn.net/detail/lumin1914/9484090这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/lumin1914/article/details/51085455