主要是Fragment的使用,其切换fragment的步骤如下

    1、获取FragmentManager 实例,但是需要MainActivity extends FragmentActivity才能去获取FragmentManager.

            通过FragmentManager  fragmentManager=getSupportFragmentManager();

    2、开启事务  ,有点类似javaee里的hibernate 操作数据库

         FragmentTranaction tranaction=   fragmentManager.beginTranction(); 

    3、通过事务来替换fragment

        tranaction.replace(R.id.fl_main_content,fragment);  //参数中第一个是代表fragmentLayout容器,即这个fragment放到哪里,第二个代表fragment实例

    4、提交事务

        tranaction.commit();


下面概括性的写一下今天的主要内容:

   1、 创建一个基类BasePager,在里面初始化数据,这里先定义了一个View ,作为测试FragmentLayou里显示的内容。

   2、创建四个子类,继承BasePager ,分别是VideoPager,AudioPager,NetVideoPager,NetAudioPager

    3、在MainActivity里新建一个集合,在activity的onCreate()里把集合实例new出来,并往集合里添加了四个子类的实例。

    4、通过radiogroup的OnCheckedChangedListener()来监听radiobutton的状态,来切换fragment

    5、通过上面监听类里的onCheckedChanged方法,来判断是哪个radiobutton被选中,然后获取其实例,进一步来获取其中的view,然后切换fragement来显示不同页面。


具体代码如下

1、BasePager

package com.yuanlp.mobileplayer.base;

import android.content.Context;
import android.view.View;

/**
 * Created by 原立鹏 on 2017/7/13.
 * 基类
 */

public abstract class BasePager {

    /**
     * 这个是上下文,子类后面要用,所以写为public
     *
     */
    public final Context context;

    public View rootview;
    public boolean isinitData;

    public BasePager(Context context){
        this.context=context;

        rootview=initView();
    }

    /**
     * 强制子类实现特定的效果
     * @return
     */
    public abstract View initView();


    /**
     * 当子类初始化,需要联网请求数据时,或者绑定数据时,需要重写改方法
     */
    public void initData(){

    }
}

2、VideoPager,其他三个就不写了,大同小异。

package com.yuanlp.mobileplayer.pager;

import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;

import com.yuanlp.mobileplayer.base.BasePager;
import com.yuanlp.mobileplayer.utils.LogUtil;


/**
 * Created by 原立鹏 on 2017/7/13.
 * 本地视频的页面
 */

public class VideoPager extends BasePager {
    public TextView textview;

    public VideoPager(Context context) {
        super(context);

    }

    /**
     * 强制子类实现特定的效果
     *
     * @return
     */
    @Override
    public View initView() {
        LogUtil.e("本地视频被初始化了");
        textview=new TextView(context);
        textview.setTextSize(25);
        textview.setGravity(Gravity.CENTER);
        textview.setTextColor(Color.RED);
        return textview;
    }

    @Override
    public void initData() {
        super.initData();
        LogUtil.e("本地视频页面的数据被初始化了");
        textview.setText("本地视频页面");
    }
}

3、MainActivity

package com.yuanlp.mobileplayer.activity;

import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.RadioGroup;

import com.yuanlp.mobileplayer.R;
import com.yuanlp.mobileplayer.base.BasePager;
import com.yuanlp.mobileplayer.pager.AudioPager;
import com.yuanlp.mobileplayer.pager.NetAudioPager;
import com.yuanlp.mobileplayer.pager.NetVideoPager;
import com.yuanlp.mobileplayer.pager.VideoPager;

import java.util.ArrayList;
import java.util.List;

/**
 * 主页面
 * Created by 原立鹏 on 2017/7/12.
 */

public class MainActivity extends FragmentActivity{

    private FrameLayout fl_main_content;
    private RadioGroup rg_bottom_tag;

    /**
     * 本地页面集合
     */
    public static List basepagers;

    /**
     * 选中的位置
     */
    public static int position;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_main);
        fl_main_content= (FrameLayout) findViewById(R.id.fl_main_content);
        rg_bottom_tag= (RadioGroup) findViewById(R.id.rg_bottom_tag);


        basepagers=new ArrayList();
        basepagers.add(new VideoPager(this)); //本地视频  位置是0
        basepagers.add(new AudioPager(this));  //本地音乐 位置是1
        basepagers.add(new NetVideoPager(this));  //网络视频 位置是2
        basepagers.add(new NetAudioPager(this));  //网络音乐 位置是3


        //在这里设置radiogroup的监听
        rg_bottom_tag.setOnCheckedChangeListener(new myOnCheckedChangeListener());

        rg_bottom_tag.check(R.id.rb_video);  //默认选中主页的本地视频
    }

    class myOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener{

        /**
         * 

Called when the checked radio button has changed. When the          * selection is cleared, checkedId is -1.

         *          * @param group     the group in which the checked radio button has changed          * @param checkedId the unique identifier of the newly checked radio button          */         @Override         public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {             switch (checkedId){                 default:                     position=0;                     break;                 case R.id.rb_audio:  //选中的是本地音乐                     position=1;                     break;                 case R.id.rb_video:  //选中的是本地视频                     position=0;                     break;                 case R.id.rb_net_audio:  //选中的是网络音乐                     position=3;                     break;                 case R.id.rb_net_video:  //选中的是网络视频                     position=2;                     break;             }             //把创建的页面放到Fragment中             setFragment();         }         private void setFragment() {             //Fragment的步骤             //1、获取FragmentManager             FragmentManager fragmentManager = getSupportFragmentManager();             //2、开启事务             FragmentTransaction transaction = fragmentManager.beginTransaction();             //3、替换Fragement                         transaction.replace(R.id.fl_main_content,new myFragment());             //4、提交事务             transaction.commit();         }     }     public static class myFragment extends Fragment{         @Nullable         @Override         public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {             BasePager b1=getBasePager();             if (b1!=null){                 return b1.rootview;             }             return null;         }     }     public static BasePager getBasePager() {         BasePager basepager=basepagers.get(position);         if (basepager!=null&&!basepager.isinitData){             basepager.isinitData=true;             basepager.initData();  //初始化页面的数据,调用各个页面类里的initData()方法             return basepager;         }         return basepager;     } }



需要注意的是在Mainactivity中的替换fragment步骤时,第二个参数,不能写new Fragment(){}这样的匿名内部类,不然会报错:Fragment null must be a public static class to be properly recreated from in  这个错误的原因是v4包升级成25后,Fragment必须要作为一个public 的static类,才能在此使用。具体的使用办法可以参照我的代码。