当前位置: 首页 > news >正文

写网站方案北京注册工作室代理公司

写网站方案,北京注册工作室代理公司,建设商业网站的功能定位,四川建站一、原生组件回调 JS 层提供的事件方法 比如 TextInput 组件 onChangeText 属性,输入事件是发生在原生层的但是需要通知 JS 层发生了变化,并执行 JS 层的方法。 1、给原生组件添加一个按钮用于触发原生事件方法 在 XML 中添加一个按钮 为了方便让 Inf…

一、原生组件回调 JS 层提供的事件方法

比如 TextInput 组件 onChangeText 属性,输入事件是发生在原生层的但是需要通知 JS 层发生了变化,并执行 JS 层的方法。

1、给原生组件添加一个按钮用于触发原生事件方法

在 XML 中添加一个按钮

在这里插入图片描述

为了方便让 InfoView 的类,继承自 LinearLayout 类并实现 View.OnClickListener 点击事件处理的接口,就可以在点击时执行特定的逻辑。

public class InfoView extends LinearLayout implements View.OnClickListener {}

在这里插入图片描述
到这里就已经完成了原生事件的编写,可以点击按钮切换头像的形状。但是原生事件执行了 JS 层现在并不知道这件事已经发生了。

2、告诉 JS 层发生了切换形状的事件,并传入事件参数告知是什么形状

// 创建一个可写的事件参数映射
WritableMap eventParams = Arguments.createMap();
eventParams.putString("shape", this.shape);
// 获取当前视图的 ReactContext
ReactContext context = (ReactContext) getContext();
// 通过 ReactContext 获取 RCTEventEmitter 模块并使用 receiveEvent 方法发送事件
context.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), "onShapeChange", eventParams);

在这里插入图片描述

所有的视图、属性、事件都必须经过 InfoViewManager 进行管理,还需要在 InfoViewManger 中管理该事件。

    @Nullable@Overridepublic Map getExportedCustomBubblingEventTypeConstants() {return MapBuilder.builder().put("onShapeChange",MapBuilder.of("phasedRegistrationNames",MapBuilder.of("bubbled", "onShapeChange")))// to-do 继续 put.build();}

在这里插入图片描述

getExportedCustomBubblingEventTypeConstants 方法返回一个映射,其中包含了你自定义冒泡事件类型的信息。在这里定义了一个名为 “onShapeChange” 的事件,并将其关联到 “onShapeChange” 冒泡阶段。

这是一个相对固定的写法,只需替换 “onShapeChange” 为自定义事件名。这样在 JavaScript 层就可以监听和处理这个自定义冒泡事件。

3、在业务使用该时事件回调

在这里插入图片描述

效果:
在这里插入图片描述

二、公开原生组件方法给 JS 层调用

export default () => {const ref  = useRef(null);useEffect(() => {setTimeout(() => {sendCommand('setShape', ['round']);}, 3000);}, []);const sendCommand = (command: string, params: any[]) => {const viewId = findNodeHandle(ref.current);// @ts-ignoreconst commands = UIManager.NativeInfoView.Commands[command].toString();UIManager.dispatchViewManagerCommand(viewId, commands, params);}return (<NativeInfoViewref={ref}style={styles.infoView}avatar={avatarUri}desc="xxx"onShapeChange={(e: any) => {console.log(e.nativeEvent.shape);}}/>);
}

receiveCommand 方法是 React Native 中用于处理来自 JavaScript 层的命令(commands)的方法。

InfoViewManager.java

public class InfoViewManager extends SimpleViewManager<InfoView> {@Nullable@Overridepublic Map<String, Integer> getCommandsMap() {return MapBuilder.of("setShape", SET_SHAPE_CODE);}@Overridepublic void receiveCommand( @NonNull InfoView view, String commandId, @Nullable ReadableArray args) {int command = Integer.parseInt(commandId);if (command == SET_SHAPE_CODE) {if (args != null && args.size() > 0) {String shape = args.getString(0);view.setShape(shape);}} else {// TODOsuper.receiveCommand(view, commandId, args);}}public static final int SET_SHAPE_CODE = 100;
}

InfoView.java

    public void setShape(String shape) {this.shape = shape;Glide.with(this).load(this.url).transform(shape == "circle"? new CircleCrop(): new RoundedCorners(30)).into(avatarImg);}
http://www.yayakq.cn/news/567571/

相关文章:

  • 女士服装定制网站网站设计方案要怎么写
  • 临沂做网站wyjzgzs做多语言网站不会翻译怎么办
  • 哪个网站可以宣传做的蛋糕wordpress和typecho
  • ps网站设计与制作门户网站的案例分析
  • 网站建设403做的网站需要买什么服务器
  • 网站建设的实训报告深圳电子商城网站设计
  • 越秀网站建设策划站长统计app下载
  • 公司网站维护要做什么电子商务网站建设与管理实训报告
  • 哪里有好网站设计手机ps软件如何做ppt下载网站
  • 个人主页静态网站wordpress主题图片消失
  • 昌平网站制作深圳网站开发专业
  • 宿迁网站推广公司手车做网课网站
  • 南宁江南区网站制作多少钱本地网站后台管理建设
  • 机械行业网站模板做企业网站用什么cms
  • 购物网站大全分类韩国网站 后缀
  • 太原住房和城乡建设部网站重庆公司核名在哪个网站
  • 网站制作中动态展示怎么做免费移动版wordpress
  • wordpress中国网站排名学校做网站需要什么
  • 十大团购网站厦门网站制作阳哥
  • 如何做婚庆公司的网站手机网页微信
  • 东莞怎么制作网站网站建设 知乎
  • asp购物网站客户查看购物车如何提高网站搜索排名
  • 手机怎么做淘客网站个人网站制作在线
  • 手机与pc的网站开发北京开网站建设公司
  • 荆州大气网站建设价格云科技网站建设
  • 济南建站详情云南网站制作一条龙全包
  • 网站建设丶金手指花总13ev123建站
  • 网站友情链接模板常熟建设网站
  • 网站前端是做啥的低价网站建设咨询
  • 自己创建的网站怎么做流量网站页面链接怎么做