package gueei.binding;
import java.util.ArrayList;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.LayoutInflater.Factory;
import android.view.View;
public class ViewFactory implements Factory {
public static final String BINDING_NAMESPACE = "http://schemas.android.com/apk/res/gueei.binding";
private LayoutInflater mInflater;
private ArrayList<View> processedViews = new ArrayList<View>();
public ViewFactory(LayoutInflater inflater){
this.mInflater = inflater;
}
protected View CreateViewByInflater(String name, Context context,
AttributeSet attrs) {
try {
String viewFullName = "android.widget." + name;
if (name.equals("View") || name.equals("ViewGroup"))
viewFullName = "android.view." + name;
else if (name.startsWith("binding.")){
viewFullName = "gueei.binding.widgets." + name.substring(name.indexOf('.') + 1);
}else if (name.contains("."))
viewFullName = name;
View view = mInflater.createView(viewFullName, null,
attrs);
return view;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = CreateViewByInflater(name, context, attrs);
if (view==null) return null;
createBindingMapForView(view, attrs);
return view;
}
protected void createBindingMapForView(View view, AttributeSet attrs){
BindingMap map = Utility.createBindingMap(attrs);
// Only save those with binding attributes
if (!map.isEmpty()){
Binder.putBindingMapToView(view, map);
processedViews.add(view);
}
}
public ArrayList<View> getProcessedViews(){
return processedViews;
}
}