标签:手机商城第二天 利用fragment的生命周期来切换不同页面
这几天晚上练习科目三,一般都到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个代码看看。
本文出自 “YuanGuShi” 博客,请务必保留此出处http://cm0425.blog.51cto.com/10819451/1954653
标签:手机商城第二天 利用fragment的生命周期来切换不同页面
原文地址:http://cm0425.blog.51cto.com/10819451/1954653