Android通过动态加载Fragment实现TabActivity效果
2015-10-31 21:41
537 查看
Fragment算是android学习中级的知识点了,一直很神往,今天也学习浅显的知识,并用它实现简单的TabActivity效果。
根据我的理解,Fragment可以算是简易版的Activity,更方便调用,将可能重复使用到的部分做成fragment,可以在不同的activity里调用到,并且同一个activity可以调用多个fragment,代码可以显得干净整洁,可读性强。
Fragment和Activity有很相似的生命周期,也会有个布局文件,对布局文件的操作一般放在函数onCreateView里,今天做个小例子,布局控件都很简单,忽略不急。这里一共创建了3个fragment,作为TabActivity切换显示使用。TabActivity里最下方添加了三个按钮,按下每个按钮时,分别在页面显示一个fragment,并隐藏另外两个,原理很简单。具体实现如下:
理解浅陋,不足之处,多多指正。
根据我的理解,Fragment可以算是简易版的Activity,更方便调用,将可能重复使用到的部分做成fragment,可以在不同的activity里调用到,并且同一个activity可以调用多个fragment,代码可以显得干净整洁,可读性强。
Fragment和Activity有很相似的生命周期,也会有个布局文件,对布局文件的操作一般放在函数onCreateView里,今天做个小例子,布局控件都很简单,忽略不急。这里一共创建了3个fragment,作为TabActivity切换显示使用。TabActivity里最下方添加了三个按钮,按下每个按钮时,分别在页面显示一个fragment,并隐藏另外两个,原理很简单。具体实现如下:
package com.huiyu.hornsey.fragmentdemo; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; public class MainActivity extends Activity implements View.OnClickListener { private static final String TAG = "MainActivity"; private FragmentTransaction ft; private Fragment homeFragment, messageFragment, meFragment, currentFragment; private LinearLayout homeLayout, messageLayout, meLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initTab(); } private void initTab() { LinearLayout layout; homeLayout.setBackgroundColor(getResources().getColor(R.color.white)); messageLayout.setBackgroundColor(getResources().getColor(R.color.white)); meLayout.setBackgroundColor(getResources().getColor(R.color.white)); if (!homeFragment.isAdded()) { ft.add(R.id.container, homeFragment).commit(); currentFragment = homeFragment; homeLayout.setBackgroundColor(getResources().getColor(R.color.beike_blue_light)); } } private void initView() { ft = getFragmentManager().beginTransaction(); homeFragment = new HomeFragment(); meFragment = new MeFragment(); messageFragment = new MessageFragment(); homeLayout = (LinearLayout) findViewById(R.id.tab_home); messageLayout = (LinearLayout) findViewById(R.id.tab_message); meLayout = (LinearLayout) findViewById(R.id.tab_me); homeLayout.setOnClickListener(this); messageLayout.setOnClickListener(this); meLayout.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tab_home: clickLayoutHome(); break; case R.id.tab_message: clickLayoutMessage(); break; case R.id.tab_me: clickLayoutMe(); break; default: break; } } private void clickLayoutHome() { homeLayout.setBackgroundColor(getResources().getColor(R.color.white)); messageLayout.setBackgroundColor(getResources().getColor(R.color.white)); meLayout.setBackgroundColor(getResources().getColor(R.color.white)); homeLayout.setBackgroundColor(getResources().getColor(R.color.beike_blue_light)); addOrShowFragment(homeFragment); } private void clickLayoutMessage() { homeLayout.setBackgroundColor(getResources().getColor(R.color.white)); messageLayout.setBackgroundColor(getResources().getColor(R.color.white)); meLayout.setBackgroundColor(getResources().getColor(R.color.white)); messageLayout.setBackgroundColor(getResources().getColor(R.color.beike_blue_light)); addOrShowFragment(messageFragment); } private void clickLayoutMe() { homeLayout.setBackgroundColor(getResources().getColor(R.color.white)); messageLayout.setBackgroundColor(getResources().getColor(R.color.white)); meLayout.setBackgroundColor(getResources().getColor(R.color.white)); meLayout.setBackgroundColor(getResources().getColor(R.color.beike_blue_light)); addOrShowFragment(meFragment); } private void addOrShowFragment(Fragment fragment) { if (currentFragment != fragment) { if (!fragment.isAdded()) { getFragmentManager().beginTransaction().hide(currentFragment).add(R.id.container, fragment).commit(); } else { getFragmentManager().beginTransaction().hide(currentFragment).show(fragment).commit(); } currentFragment = fragment; } } }
理解浅陋,不足之处,多多指正。
相关文章推荐
- Android性能分析工具
- Android Studio工程中添加Admob广告条代码详解
- android开发关于和使用本机内存、内置存储卡和外置存储卡 (转)
- Android手机自带内部存储路径的获取 (转)
- android自定义对话框
- android 自己绘画圆形文字bitmap
- android开发日志之2048安卓版
- 浅谈Android RecyclerView
- Android学习之初识xUtils
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- android SQLiteDatabase数据库使用的时候 常见问题
- android 之 spinner的简单使用
- Android-Universal-Image-Loader学习笔记(一)
- Android-Universal-Image-Loader最新框架解析
- Android 不通过USB数据线调试的方法
- Android Activity四种启动模式
- 安卓Handler机制的简单介绍——随机点名案例
- android左右滑动翻页查看图片
- 《Android开发技术周报》笔记