CAM*_*BAP 5 android react-native
我有一个简单的例子,它使用了一些我在 javascript 代码中使用的本机视图,如下所示:
import React, { useState, useEffect } from 'react';
import { Text, Button, View } from 'react-native';
const TestApp = () => {
const [isShowingNativeView, setIsShowingNativeView] = useState(true);
// ... some state logic
let contentView;
if (isShowingNativeView) {
contentView = <MyNativeView />;
} else {
contentView = <Text>Text component</Text>;
}
return (
<View style={{ width: '100%', heinght: '100%' }}>
{contentView}
</View>
);
}
export default TestApp;
Run Code Online (Sandbox Code Playgroud)
这是ViewManager实现的样子:
class MyNativeViewManager(private val reactContext: ReactApplicationContext) : SimpleViewManager<MyNativeView>() {
companion object {
private val TAG = MyNativeViewManager::class.java.simpleName
private val REACT_CLASS = MyNativeView::class.java.simpleName
}
override fun getName(): String = REACT_CLASS
override fun createViewInstance(reactContext: ThemedReactContext): MyNativeView {
return MyNativeView(reactContext)
}
override fun onDropViewInstance(view: MyNativeView) {
Log.d(TAG, "onDropViewInstance")
super.onDropViewInstance(view)
}
}
Run Code Online (Sandbox Code Playgroud)
这是MyNativeView实现:
class MyNativeView(context: Context) : GLSurfaceView(context) {
private val TAG = MyNativeView::class.java.simpleName as String
override fun onAttachedToWindow() {
super.onAttachedToWindow()
Log.d(TAG, "onAttachedToWindow")
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
Log.d(TAG, "onDetachedFromWindow")
}
override fun onWindowVisibilityChanged(visibility: Int) {
super.onWindowVisibilityChanged(visibility)
Log.d(TAG, "onWindowVisibilityChanged $visibility")
}
override fun onDisplayHint(hint: Int) {
super.onDisplayHint(hint)
Log.d(TAG, "onDisplayHint $hint")
}
}
Run Code Online (Sandbox Code Playgroud)
当我的视图可见或不可见时,如何在本机代码中获得可见性回调?我试过了:
ViewManager.onDropViewInstanceViewManager.onDetachedFromWindowView.onWindowVisibilityChangedView.onDisplayHintView.onVisibilityChangedView.onVisibilityAggregatedView.onStartTemporaryDetach但这些都不起作用。
这可以按照我预期的方式实现吗?我应该尝试另一种方法吗?
更新
这个项目https://github.com/ShaMan123/react-native-visibility-tracker使用我尝试过的相同方法,看起来它有效,所以可能与 GLSurfaceView 本身有关
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |