react-native封装原生下拉刷新组件
2018-01-22 18:37
477 查看
之前改进过一个react-native-pull组件解决了iOS上刷新头部出现空白问题,并且将listview改成了flatlist。
github如下:
react-native-pullview这是纯js写的Android&&iOS都可以使用。在iOS上面性能还是可以的,但是在Android上滑动时虽然也可以使用但是总是感觉有点卡顿,不是很如意。
因为rn在Android上滑动事件就不是很流畅,Facebook也一直被这个问题困扰。所以无奈最终只好自己封装一个原生的下拉刷新组件来解决这个问题。
官网为我们提供了封装原生组件的方法和例子但是下拉刷新这个和明显不是一个简单的view而是一个viewgroup(关于封装View参考封装原生View或者rn封装原生jsbridge与H5交互),可是官网上面对于封装viewgroup的例子却并没有呵呵呵呵呵呵!
在各种搜索下终于完成了这个封装。
原生控件使用的是这个SmartRefreshLayout功能很强大用的人也很多。
1:首先集成
关键代码:
效果如图:非常流畅不会卡顿
完整代码GitHub:AndroidToRN欢迎start
github如下:
react-native-pullview这是纯js写的Android&&iOS都可以使用。在iOS上面性能还是可以的,但是在Android上滑动时虽然也可以使用但是总是感觉有点卡顿,不是很如意。
因为rn在Android上滑动事件就不是很流畅,Facebook也一直被这个问题困扰。所以无奈最终只好自己封装一个原生的下拉刷新组件来解决这个问题。
官网为我们提供了封装原生组件的方法和例子但是下拉刷新这个和明显不是一个简单的view而是一个viewgroup(关于封装View参考封装原生View或者rn封装原生jsbridge与H5交互),可是官网上面对于封装viewgroup的例子却并没有呵呵呵呵呵呵!
在各种搜索下终于完成了这个封装。
原生控件使用的是这个SmartRefreshLayout功能很强大用的人也很多。
1:首先集成
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.4-7'
关键代码:
/** * Created by wuyunqiang on 2018/1/16. */ public class PullLayout extends ViewGroupManager<SmartRefreshLayout> { @Override public String getName() { return "PullLayout"; } @Override protected SmartRefreshLayout createViewInstance(ThemedReactContext reactContext) { SmartRefreshLayout refreshLayout = (SmartRefreshLayout) LayoutInflater.from(reactContext).inflate(R.layout.activity_pull,null); header = new Header(reactContext); return refreshLayout; } @Override public void addView(SmartRefreshLayout parent, View child, int index) { super.addView(parent, child, index); parent.addView(header,0);//设置header parent.onFinishInflate();//在这个方法里面添加子布局 这里要主动调用否则无法显示下拉刷新内容 } //发送给RN刷新事件 加载数据 public void refresh(ThemedReactContext reactContext,SmartRefreshLayout refreshlayout){ if(reactContext!=null){ WritableMap params = Arguments.createMap(); params.putString("from","native"); Log.i(TAG,"开始刷新"); if(CanRefresh){ CanRefresh = false; this.dispatchEvent(reactContext,refreshlayout,"onRefreshReleased",params); } } } public void dispatchEvent(final ReactContext reactContext, final SmartRefreshLayout refreshlayout, final String eventName, @android.support.annotation.Nullable final WritableMap params) { if (reactContext==null) { Log.i(TAG, "reactContext==null"); refreshlayout.finishRefresh(); }else{ Log.i(TAG, "发送消息事件 " +"refreshlayout View id : " + refreshlayout.getId()); Log.i(TAG, "key:" + this.Key+eventName); //原生模块发送事件 reactContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(this.Key+eventName, params); } }
效果如图:非常流畅不会卡顿
完整代码GitHub:AndroidToRN欢迎start
相关文章推荐
- 【react-native-0.31-iOS】封装原生组件并调用(02)
- react-native之上拉加载,下拉刷新组件封装
- React-Native踩坑之路:react-native原生组件封装(iOS)
- ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State
- 《React-Native系列》38、 ReactNative混合组件封装
- React Native之原生UI组件封装---适配Android
- react-native IOS端原生组件封装步骤
- react-native 组件封装示例
- react-native 在android封装原生listView
- 关于React-native里Android原生模块和组件的写法
- 可能是最in的React Native使用原生自定义下拉刷新组件
- 《React-Native系列》13、 组件封装之Dialog(iOS和Android通用)
- React-native 调用原生组件
- 如何创建一个Android原生的react-native组件(一)
- react-native-navigation 原生路由组件的使用
- react-native组件封装与传值
- 这是一个实现下拉刷新的react native组件 react-native-pullview
- react-native组件Button封装与传值
- React-Native 自封装原生模块
- 好用的ReactNative下拉刷新上拉加载的组件,支持iOS和Android