Android通过动态加载Fragment实现TabActivity效果

Fragment算是android学习中级的知识点了,一直很神往,今天也学习浅显的知识,并用它实现简单的TabActivity效果。

根据我的理解,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;
}

}
}

理解浅陋,不足之处,多多指正。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值