/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.fun.binder.ui; import com.taobao.luaview.fun.base.BaseFunctionBinder; import com.taobao.luaview.fun.base.BaseVarArgUICreator; import com.taobao.luaview.fun.mapper.ui.UICustomPanelMethodMapper; import com.taobao.luaview.view.interfaces.ILVView; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import org.luaj.vm2.lib.LibFunction; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; /** * 自定义面板,支持将其他自定义View加入该面板并跟Lua交互 * @author song */ public class UICustomPanelBinder extends BaseFunctionBinder { private Class mPanelClazz; public UICustomPanelBinder(final Class clazz, final String bindName) { super(bindName != null ? bindName : (clazz != null ? clazz.getSimpleName() : null)); this.mPanelClazz = clazz; } @Override public Class<? extends LibFunction> getMapperClass() { return UICustomPanelMethodMapper.class; } @Override public LuaValue createCreator(LuaValue env, LuaValue metaTable) { return new BaseVarArgUICreator(env.checkglobals(), metaTable, getMapperClass()) { @Override public ILVView createView(Globals globals, LuaValue metaTable, Varargs varargs) { if (mPanelClazz != null) { try { final Constructor constructor = mPanelClazz.getConstructor(Globals.class, LuaValue.class, Varargs.class); return (ILVView) constructor.newInstance(globals, metaTable, varargs); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } return null; } }; } }