这几天晚上练习科目三,一般都到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<BaseFragement>();
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个代码看看。
转载于:https://blog.51cto.com/cm0425/1954653