简单实现步骤:
两个方法,一个提供完整包名.类以及资源所在引用(android的话就是xml的id);
另外一个方法就是用反射加上多态实现的装载;
private List<View> getViewList(List<View> list){
if(list == null)
list = new ArrayList<View>();
String vName[] = {"com.sansui.Memo.MemoView",
"com.sansui.Calendar.CalendarView","com.sansui.ClassRoom.ClassRoom"};
int vNo[] = {R.layout.memoview, R.layout.calendarview , R.layout.classroomview};
for(int i = 0 ; i < vNo.length ; i++)
list.add(getInstanceView(vName[i],vNo[i]));
return list;
}
这里要解释下: 装载在vNames的三个类是自定义控件的类,其最上层父类是View(类似于j2se的object吧);
private View getInstanceView(String className,int resouces){
XmlPullParser parser = this.getResources().getXml(resouces);
AttributeSet attributes = Xml.asAttributeSet(parser);
Object view = null;
try {
Class clazz = Class.forName(className);
Constructor con = clazz.getDeclaredConstructor(Context.class,AttributeSet.class);
view = con.newInstance(MainView.this,attributes);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return (View)view;
}
再用一个简单的反射装载好了类(也就是具体类和xml的匹配以及实例化);
再装入list容器中
作用的话,应该是viewpager的设置吧,当时写这个就是这样打算的;是不是觉得很方便呢? 要是有多个view的话就很简单灵活的可以装载了,而且此类方法复用性相当高;