RadioGroup和Fragment组合实现切换类似于微博、微信底部的切换

项目中有许多地方用到了RadioGroup和Fragment组合实现切换类似于微博、微信底部的切换


布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.aima.jiangtao.libraryproject.activity.BottomTagActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- 底下的3个tab -->
        <RadioGroup
            android:id="@+id/mHomeRadioGroup"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:layout_alignParentBottom="true"
            android:background="#50ffffff"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/mHomeHomeRb"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/selector_tab_home"
                android:gravity="center"
                android:background="#00000000"
                android:paddingBottom="2dp"
                android:paddingTop="4dp"
                android:text="演出"
                android:textColor="@drawable/selector_tab_text_color"
                android:textSize="10sp" />

            <RadioButton
                android:id="@+id/mHomeCommunityRb"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/selector_tab_community"
                android:gravity="center"
                android:paddingBottom="2dp"
                android:paddingTop="4dp"
                android:background="#00000000"
                android:text="社区"
                android:textColor="@drawable/selector_tab_text_color"
                android:textSize="10sp" />

            <RadioButton
                android:id="@+id/mHomePersonRb"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/selector_tab_person"
                android:gravity="center"
                android:background="#00000000"
                android:paddingBottom="2dp"
                android:paddingTop="4dp"
                android:text="我"
                android:textColor="@drawable/selector_tab_text_color"
                android:textSize="10sp" />
        </RadioGroup>
        <!-- tab上方的显示区域 -->
        <FrameLayout
            android:id="@+id/mHomeContent"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="50dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </FrameLayout>
    </RelativeLayout>
</RelativeLayout>

selector_top_home.xml其他的2个一样就不写了

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/tab_home_selector_pre_icon" android:state_pressed="false" android:state_selected="true" />
    <item android:drawable="@drawable/tab_home_selector_pre_icon" android:state_checked="true" android:state_pressed="false" />
    <item android:drawable="@drawable/tab_home_selector_nor_icon" />


</selector>
下面是Activity 代码

package com.aima.jiangtao.libraryproject.activity;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.widget.FrameLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.aima.jiangtao.libraryproject.R;
import com.aima.jiangtao.libraryproject.fragment.CommunityFragment;
import com.aima.jiangtao.libraryproject.fragment.HomeFragment;
import com.aima.jiangtao.libraryproject.fragment.PersonFragment;

/***
 *  Created by jiangtao
 * 16/3/10
 * 底部切换Activity
 */

public class BottomTagActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener{
    private FrameLayout mHomeContent;
    private RadioGroup mHomeRadioGroup;
    /**
     * 首页
     */
    private RadioButton mHomeHomeRb;
    /**
     * 社区
     */
    private RadioButton mHomeCommunityRb;
    /**
     * 个人
     */
    private RadioButton mHomePersonRb;
    /**
     * 一共3个fragment
     */
    private static final int NUM_ITEMS = 3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bottom_tag);
        initView();
        setListener();
    }

    /**
     * 初始化View
     */
    private void initView(){
        mHomeContent = (FrameLayout) findViewById(R.id.mHomeContent);
        mHomeRadioGroup = (RadioGroup) findViewById(R.id.mHomeRadioGroup);
        mHomeHomeRb = (RadioButton) findViewById(R.id.mHomeHomeRb);
        mHomeCommunityRb = (RadioButton) findViewById(R.id.mHomeCommunityRb);
        mHomePersonRb = (RadioButton) findViewById(R.id.mHomePersonRb);
        //注意这里一定要写上  不然默认不是被选中的
        mHomeRadioGroup.check(R.id.mHomeHomeRb);
        showIndexView(0);
    }

    /**
     * 设置监听
     */
    public void setListener(){
      mHomeRadioGroup.setOnCheckedChangeListener(this);

    }
    /**
     *用adapter来管理三个Fragment界面的变化。
     *注意,我这里用的Fragment都是v4包里面的
     *
     */
    FragmentStatePagerAdapter fragmentStatePagerAdapter = new FragmentStatePagerAdapter(BottomTagActivity.this.getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            Fragment fragment = null;
            switch (position) {
                case 0:// 首页
                    fragment = new HomeFragment();
                    break;
                case 1:// 社区
                    fragment = new CommunityFragment();
                    break;
                case 2:// 个人
                    fragment = new PersonFragment();
                    break;
                default:
                    new HomeFragment();
                    break;
            }
            return fragment;
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }
    };

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        int index = 0;
        switch (checkedId){
            case R.id.mHomeHomeRb:
                index = 0;
                break;
            case R.id.mHomeCommunityRb:
                index = 1;
                break;
            case R.id.mHomePersonRb:
                index = 2;
                break;
        }
        // 通过fragments这个adapter还有index来替换帧布局中的内容
        showIndexView(index);
    }
    public void showIndexView(int index){
        Fragment fragment = (Fragment) fragmentStatePagerAdapter.instantiateItem(mHomeContent, index);
        // 一开始将帧布局中的内容设置为第一个
        fragmentStatePagerAdapter.setPrimaryItem(mHomeContent, 0, fragment);
        fragmentStatePagerAdapter.finishUpdate(mHomeContent);
    }

}

HomeFragment代码:

package com.aima.jiangtao.libraryproject.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.aima.jiangtao.libraryproject.R;
import com.aima.jiangtao.libraryproject.utils.ToashUtils;


/**
 * Created by jiangtao
 * 16/3/10
 * com.aima.jiangtao.libraryproject.fragment
 * LibraryProject
 */
public class HomeFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.home_fragment,null);
        ToashUtils.show(getActivity(),"aaaaaaa");
        return view;
    }

    // 重写setMenuVisibility方法,不然会出现叠层的现象
    @Override
    public void setMenuVisibility(boolean menuVisibile) {
        super.setMenuVisibility(menuVisibile);
        if (this.getView() != null) {
            this.getView().setVisibility(
                    menuVisibile ? View.VISIBLE : View.GONE);
        }
    }
}

还有很多地方优化,不是很完善,如果用到了 自己优化下 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值