Android通过RadioGroup+Fragment实现底部导航栏

简单效果:

Android通过RadioGroup+Fragment实现底部导航栏_第1张图片
效果

fragment_radio.xml主要代码




    
    

    
        
            
            
            
        
    



页面为RadioFragment

public class RadioFragment extends Fragment implements RadioGroup.OnCheckedChangeListener {
    @BindView(R.id.rb_home)
    RadioButton rbHome;
    @BindView(R.id.rb_like)
    RadioButton rbLike;
    @BindView(R.id.rb_me)
    RadioButton rbMe;
    @BindView(R.id.radio_group)
    RadioGroup radioGroup;
    Unbinder unbinder;
    private HomeFragment homeFragment;
    private LikeFragment likeFragment;
    private  MeFragment meFragment;
    public RadioFragment() {
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_radio, container, false);
        unbinder = ButterKnife.bind(this, view);
        radioGroup.setOnCheckedChangeListener(this);//对radiogroup进行监听
        return view;
    }

    @Override
    public void onStart() {
        setDefaultFragment();//写在onCreateView里面,当页面跑到其他Fragment再回来就不会生效
        super.onStart();
    }

    private void setDefaultFragment() {
 //默认为homeFragment
        if (rbHome.isChecked()) {
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            homeFragment = new HomeFragment();
            transaction.replace(R.id.radio_fragment_content, homeFragment).commit();
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }
//主要代码
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
        FragmentTransaction transaction=getFragmentManager().beginTransaction();
        switch (i){
            case R.id.rb_home:
                if (homeFragment==null){
                    homeFragment= new HomeFragment();
                }
                transaction.replace(R.id.radio_fragment_content,homeFragment).commit();
                break;
            case R.id.rb_like:
                if (likeFragment==null){
                    likeFragment=new LikeFragment();
                }
                transaction.replace(R.id.radio_fragment_content,likeFragment).commit();
                break;
            case R.id.rb_me:
                if (meFragment==null){
                    meFragment=new MeFragment();
                }
                transaction.replace(R.id.radio_fragment_content,meFragment).commit();
                break;
        }

    }
}

radiobutton的style文件

style文件
    

每个按钮的drawable是一个selector,如图:

Android通过RadioGroup+Fragment实现底部导航栏_第2张图片
image.png

然后对于相应的三个fragment,也是是分简单,给出一个示例,具体剩下的就自己去添加了:

public class HomeFragment  extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view= inflater.inflate(R.layout.sub_fragment_home,container,false);
        return view;
    }
}

你可能感兴趣的:(Android通过RadioGroup+Fragment实现底部导航栏)