是否可以将prop nativeID
添加到如下视图中:
<View nativeID="viewId">...</View>
然后使用该ID在我的本机android和iOS代码中定位视图,以便我可以在其上应用一些本机方法。如果是这样的话,将不胜感激。
答案 0 :(得分:1)
是可能的。如果您使用的是NativeModules或Native Component,则这里有两种情况。
案例1:NativeModules。 我想在这种情况下,您想在JS端单击按钮后在本机端找到视图。我还假定您知道如何在react-native中创建NativeModules。好的,首先我们需要找到绑定视图的根视图,并使用React Native提供的帮助程序类来找到该视图。
代码:
@ReactMethod
public void locateView(String nativeViewId)
{
Activity activity = context.getCurrentActivity();
activity.runOnUiThread(new Runnable() {
@Override
public void run()
{
View rootView = activity.getWindow().getDecorView().getRootView();
View requiredView = ReactFindViewUtil.findView(rootView, nativeViewId);
/** requiredView is your JSX view with nativeID found on Java Side, now you can apply your preferred native functions to it. **/
}
});
}
如果您使用的是NativeComponent,则可以使用以下代码轻松找到rootView:
代码:
View rootView = getRootView();
,其余代码与使用NativeModules相同。希望这对您有帮助,如果您有任何问题可以随时询问我。
答案 1 :(得分:0)
您可以在将nativeId添加到视图中之后使用它:
ReactFindViewUtil.addViewListener(onViewFoundListener);
private ReactFindViewUtil.OnViewFoundListener createOnViewFoundListener() {
return new ReactFindViewUtil.OnViewFoundListener() {
@Override
public String getNativeId() {
return "NativeID";
}
@Override
public void onViewFound(final View view) {
// some code
}
};
}
答案 2 :(得分:0)
是的,有可能。假设您在js中有一个视图,
<CustomView> <View nativeID={'childView'}> <CustomView>
在带有视图容器和本机ID的android本机模块上调用ReactFindViewUtil.findView()
ReactFindViewUtil.findView(CustomView, "childView")
在ReactFindViewUtil.findView()
中找到了com.facebook.react.uimanager.util
我相信iOS上也有类似的util。我还没有探索。