fragment一些经典用法

28 篇文章 0 订阅
mport java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;

import com.tz.dream.fragment.tabbar.fragment.BaseFragment;
import com.tz.dream.fragment.tabbar.fragment.MainFragment;
import com.tz.dream.fragment.tabbar.fragment.MeFragment;
import com.tz.dream.fragment.tabbar.fragment.MoreFragment;
import com.tz.dream.fragment.tabbar.fragment.PointFragment;

public class MainActivity extends FragmentActivity implements
		OnCheckedChangeListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initView();
	}

	private void initView() {
		RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
		radioGroup.setOnCheckedChangeListener(this);
		// 如果调用了此方法那么onCheckedChanged会调用两次
		radioGroup.check(R.id.rb_main);
	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		Toast.makeText(this, "onCheckedChanged", Toast.LENGTH_SHORT).show();
		// 替换fragment
		// 一般比较粗糙的办法
		// 思考:这么干有什么不好的?
		// 每次都要创建对象---这样的话会导致我们的GC垃圾回收器不断的回收我们的对象
		// 所以说我们不能每一次都创建fragment
		switch (checkedId) {
		case R.id.rb_main:
			show(MainFragment.class);
			// beginTransaction.add(arg0, arg1)
			// beginTransaction.remove(arg0)
			// beginTransaction.show(arg0)
			// beginTransaction.hide(arg0)
			// beginTransaction.replace(R.id.fl, new MainFragment());
			// beginTransaction.commit();
			break;
		case R.id.rb_me:
			show(MeFragment.class);
			// beginTransaction.replace(R.id.fl, new MeFragment());
			// beginTransaction.commit();
			break;
		case R.id.rb_point:
			show(PointFragment.class);
			// beginTransaction.replace(R.id.fl, new PointFragment());
			// beginTransaction.commit();
			break;
		case R.id.rb_more:
			show(MoreFragment.class);
			// beginTransaction.replace(R.id.fl, new MoreFragment());
			// beginTransaction.commit();
			break;

		default:
			break;
		}
	}

	/**
	 * 显示fragment 在这里我的fragment的tag都是我们的类名
	 * 
	 * @param clazz
	 */
	private void show(Class<? extends BaseFragment> clazz) {
		FragmentManager fragmentManager = getSupportFragmentManager();
		FragmentTransaction beginTransaction = fragmentManager
				.beginTransaction();

		// 先找我们的fragment
		Fragment fragment = fragmentManager.findFragmentByTag(clazz
				.getSimpleName());
		if (fragment == null) {
			try {
				fragment = clazz.newInstance();
				beginTransaction.add(R.id.fl, fragment, fragment.getClass()
						.getSimpleName());
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		// 显示当前选中的fragment
		List<Fragment> fragments = fragmentManager.getFragments();
		// 第一次获取fragment数量为0
		if (fragments != null) {
			for (Fragment fragment2 : fragments) {
				if (isTabFragment(fragment2)) {
					// 我们主页面需要fragment
					if (fragment2.getClass().getSimpleName()
							.equals(clazz.getSimpleName())) {
						beginTransaction.show(fragment2);
					} else {
						beginTransaction.hide(fragment2);
					}
				}
			}
		} else {
			// 等于null的时候我们默认显示第一项
			beginTransaction.show(fragment);
		}

		beginTransaction.commit();
	}

	// 筛选tab 的fragment
	private boolean isTabFragment(Fragment fragment) {
		String fragmentTag = fragment.getClass().getSimpleName();
		if (fragmentTag.equals(MainFragment.class.getSimpleName())
				|| fragmentTag.equals(MeFragment.class.getSimpleName())
				|| fragmentTag.equals(PointFragment.class.getSimpleName())
				|| fragmentTag.equals(MoreFragment.class.getSimpleName())) {
			return true;
		}
		return false;
	}
}
整理自教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值