Android端React Native无法动态添加原生View

封装了一个原生Banner轮播图给RN使用,暴露了设置数据集合的属性。
本来打算,设置RNBanner的list属性为其父View的state,然后通过动态修改这个state
来刷新banner数据,现在发现数据已经传到了原生Banner,addView方法
也执行了,可是界面上无法显示。

其实只要改变一下思路就可以了!
1、首先建立一个临时表,结构和目标表一致;假定:原表位sr_tab
create table st_tab as select * from sr_tab where 1==0;
2、将access的数据一次性导入到表st_tab
3、执行批量插入语句:
insert sr_tab values(select s* from st_tab where ID not in (select ID from sr_tab ));

已经解决了。原来是ReactRootView的onLayout()方法被重写为空了,我们在addView时触发的onLayout()被拦截了,布局操作是由RN来管理的,在创建视图时,可以添加view,但后续的修改属性,就被禁掉了。
但是,它不给调用,我们可以自己调用呀。
重写ViewGroup的方法:
@Override
public void requestLayout() {
super.requestLayout();
reLayout();
}

public void reLayout() {
    if (getWidth() > 0 && getHeight() > 0) {
        int w = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY);
        int h = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
        measure(w, h);
        layout(getPaddingLeft() + getLeft(), getPaddingTop() + getTop(), getWidth() + getPaddingLeft() + getLeft(), getHeight() + getPaddingTop() + getTop());
    }
}
    可以在addView方法自动触发requestLayout()时自动布局,也可以手动调用reLayout()方法。
    如果不想计算padding left这些值,可以把当前viewGroup再套一层viewGroup,layout方法替换为ayout(0,0,getwidth(),getHeight())即可。
    reLayout操作也可以是view自己来写。