android库工程封装总结

21 篇文章 1 订阅

在进行项目开发中,由于多个应用都需要用到播放器,因此公司要求统一播放器,并进行规范化。在第一次剥离时,库主要包含操控行为,且操控行为均在Fragment中进行处理。对于非播放行为,在具体应用中进行扩展。这时候问题出现了:对Fragment进行扩展后,activity需要更换Fragment。

解决此问题想到2种方法:

1.同时对activity进行扩展,基类提供替换原Fragment方法。如果播放器库中存在其他页面,也需调用播放activity,此时对于每个应用来说,就必须对播放器库中涉及播放activity的类全部进行重写,非常麻烦。这里主要介绍第二种方法,以便后续学习和回顾。

2.第二种方法主要学习于actionbarsherlock开源库。在播放器库中提供操控fragment帮助类,以Helper为例。

public abstract class Helper {

	public static final int BASIC = 1;
	public static final int EXTENDS = 2;
	private static SparseArray<Class<? extends Helper>> implMap = new SparseArray<Class<? extends Helper>>();
	static {
		implMap.put(BASIC, BaseHelperImpl.class);
	}

	protected static void registerImpl(Class<? extends Helper> implClass) {
		implMap.put(EXTENDS, implClass);
	}

	public static SparseArray<Class<? extends Helper>> getImpl() {
		return implMap;
	}

	public abstract Fragment getFragment(Context context, Bundle bundle);
}

默认情况下使用basic。若需扩展,则对helper添加实现。在播放activity中可以通过以下定义。

private Helper mHelper;

	protected Helper gethelper() {
		if (mHelper == null) {
			SparseArray<Class<? extends Helper>> impls = Helper.getImpl();
			Constructor<? extends Helper> ctor = null;
			try {
				if (impls.size() == 1) {
					ctor = impls.get(Helper.BASIC).getConstructor();
				} else {
					ctor = impls.get(Helper.EXTENDS).getConstructor();
				}
				return ctor.newInstance();
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}

		}
		return mHelper;
	}
在添加Fragment的地方,只需getHelper.getFragment(this,bundle);即可使用上扩展的fragment类了。

完整的demo地址为:http://download.csdn.net/detail/hpb21/7573235




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值