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

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

RadioGroup和Fragment组合实现切换类似于微博、微信底部的切换_第1张图片

布局代码:

xml version="1.0" encoding="utf-8"?>
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">
            android:layout_width="match_parent"
        android:layout_height="match_parent">

        
                    android:id="@+id/mHomeRadioGroup"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:layout_alignParentBottom="true"
            android:background="#50ffffff"
            android:orientation="horizontal" >

                            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" />

                            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" />

                            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" />
        
        
                    android:id="@+id/mHomeContent"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="50dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        
    

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

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

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


下面是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);
        }
    }
}

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






你可能感兴趣的:(Android基础)