这几天晚上练习科目三,一般都到10点多回来,所以更新比较晚。

        代码已上传到码云上,有兴趣的可以下载看看

https://git.oschina.net/joy_yuan/ShoppingMall


        上个项目中,页面切换,是做了一个BasePage,然后在里面利用了构造方法,调用构造时,就初始化其中的控件,然后在切换具体的页面时,再加载其中的数据。

        在本项目中,是做了一个BaseFragment extends Fragment,然后按照Fragment的生命周期:

            1、onCreate()

            2、onCreateView()

            3、onActivityCreated()

    来完成初始化与加载数据。关于这三个方法,上篇博客,手机商城第一天里已经有解释了,这三个方法是按照时间顺序,从第一个开始执行,到最后一个执行完毕,所以可以在onCreateView 里初始化控件,在onActivityCreated里加载数据

            这2中方法各有优点,就看大家的喜欢了。


一、切换各个页面,显示不同的内容

        就先显示主页面的第一个页面,简单的在其中写一个textview

package com.yuanlp.shoppingmall.home.fragment;

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

import com.yuanlp.shoppingmall.base.BaseFragement;

/**
 * Created by 原立鹏 on 2017/8/8.
 * 主页面的Fragment
 */

@SuppressLint("ValidFragment")
public class HomeFragment extends BaseFragement{
    private TextView textView;

    @SuppressLint("ValidFragment")
    public HomeFragment(Context context) {

    }

    /**
     * 强制子类实现他,让在oncreateview里显示这个布局。
     *
     * @return
     */
    @Override
    public View initview() {
        textView=new TextView(context);  //调用的父类里的上下文
        textView.setGravity(Gravity.CENTER);
        textView.setTextSize(25);
        textView.setTextColor(Color.RED);
        return textView;
    }

    @Override
    public void initData() {
        super.initData();
        textView.setText("主页面");
        System.out.println("开始加载数据--------------------------");
    }
}

2、MainActivity里切换页面

        a、先在oncreate里初始化一下各个页面(暂时就2个页面,其他的一样可以初始化)


baseList=new ArrayList();
baseList.add(new HomeFragment(this));
baseList.add(new ShoppingFragment(this));

        b、设置radioGroup的监听事件,当radioGroup的选中按钮变化时,回调该方法,并切换视图页面

mRgMain.setOnCheckedChangeListener(new MyOnCheckedChangeListener());
mRgMain.check(R.id.rb_home);

class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {
    @Override
    public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
        switch (checkedId){
            case R.id.rb_home:
                position=0;
                System.out.println("onCheckedChanged:--------111----------------------------------------- ");
                Log.d(TAG, "onCheckedChanged:--------111----------------------------------------- ");
                break;
            case R.id.rb_cart:
                position=1;
                break;
            default:
                position=0;
                Log.d(TAG, "onCheckedChanged:------------------------------------------------- ");
                break;

        }
        setFragement();  //切换视图页面
    }

    c、根据当前选中状态,切换页面

    

private void setFragement() {
    System.out.println("setFragement: --------------------------------------------");
    Log.d(TAG, "setFragement: --------------------------------------------");
    FragmentManager fragmentManager=getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    BaseFragement baseFragement=baseList.get(position);
    transaction.replace(R.id.framelayout,baseFragement);
    transaction.commit();
}


这篇博客主要是总结了2中切换Fragment的方法,从难易程度来说,还是这个比较简单点。

这里面调试时,有lod.d()这个Android自带的输出,也有System.out.println()这个java自带的输出,但是有时候,如果出错的话,log.d()这个方法是不显示其中的内容的,而java自带的这个输出可以正常输出,可以让我们知道程序执行到哪一步报错的。


    有兴趣的可以下载我的2个代码看看。