/* * 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.view; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.View; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import com.taobao.luaview.userdata.base.UDLuaTable; import com.taobao.luaview.userdata.list.UDBaseListView; import com.taobao.luaview.userdata.list.UDListView; import com.taobao.luaview.userdata.ui.UDView; import com.taobao.luaview.util.LuaViewUtil; import com.taobao.luaview.view.adapter.LVListViewAdapter; import com.taobao.luaview.view.interfaces.ILVListView; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import java.util.ArrayList; /** * LuaView - ListView * * @author song * @date 15/8/20 */ public class LVListView extends ListView implements ILVListView { private UDBaseListView mLuaUserdata; //adapter private LVListViewAdapter mAdapter; //header & footer container private LVViewGroup mHeaderContainer; private LVViewGroup mFooterContainer; public LVListView(Globals globals, LuaValue metaTable, Varargs varargs, UDBaseListView udBaseListView) { super(globals.getContext()); this.mLuaUserdata = udBaseListView != null ? udBaseListView : new UDListView(this, globals, metaTable, varargs); init(globals); } private void init(Globals globals) { globals.saveContainer(this); initData(globals); globals.restoreContainer(); } /** * 初始化子元素 */ private void initData(Globals globals) { // initHeaderContainer(); // initFooterContainer(); mAdapter = new LVListViewAdapter(globals, mLuaUserdata); this.setAdapter(mAdapter); this.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final UDLuaTable cellData = (UDLuaTable) view.getTag(); final int row = position - LVListView.this.getHeaderViewsCount(); mAdapter.onCellClicked(cellData, row); } }); this.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { final UDLuaTable cellData = (UDLuaTable) view.getTag(); final int row = position - LVListView.this.getHeaderViewsCount(); return mAdapter.onCellLongClicked(cellData, row); } }); this.setSelector(android.R.color.transparent); this.setDivider(new ColorDrawable(Color.TRANSPARENT));//设置divider颜色透明 mLuaUserdata.initOnScrollCallback(this); } private void initHeaderContainer() { mHeaderContainer = new LVViewGroup(mLuaUserdata.getGlobals(), mLuaUserdata.getmetatable(), null); mHeaderContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); this.addHeaderView(mHeaderContainer); this.setHeaderDividersEnabled(false); } private void initFooterContainer() { mFooterContainer = new LVViewGroup(mLuaUserdata.getGlobals(), mLuaUserdata.getmetatable(), null); mFooterContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); this.addFooterView(mFooterContainer); this.setFooterDividersEnabled(false); } @Override public UDView getUserdata() { return mLuaUserdata; } @Override public void setChildNodeViews(ArrayList<UDView> childNodeViews) { } @Override public BaseAdapter getLVAdapter() { return mAdapter; } @Override public void addHeader(View view) { if (mHeaderContainer == null) { initHeaderContainer(); } LuaViewUtil.addView(mHeaderContainer, view, null); } @Override public void removeHeader() { if (mHeaderContainer != null) { mHeaderContainer.removeAllViews(); } } @Override public void addFooter(View view) { if (mFooterContainer != null) { initFooterContainer(); } LuaViewUtil.addView(mFooterContainer, view, null); } @Override public void removeFooter() { if (mFooterContainer != null) { mFooterContainer.removeAllViews(); } } }