我可以使用prop nativeID在本地代码中查找视图吗

时间:2018-09-24 16:11:48

标签: react-native react-native-android react-native-ios

是否可以将prop nativeID添加到如下视图中: <View nativeID="viewId">...</View> 然后使用该ID在我的本机android和iOS代码中定位视图,以便我可以在其上应用一些本机方法。如果是这样的话,将不胜感激。

3 个答案:

答案 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。我还没有探索。