尝试通过nativeID

时间:2018-10-04 04:51:58

标签: react-native

我正在尝试创建一个自定义android UI组件,以公开一些android native View道具(nextFocusRight / nextFocusDown / Up / Left等)。现在,我只是扩展ReactViewManager并公开我需要的道具。

为了使它起作用,我想在react native js组件上设置nativeID,然后能够在native View上找到对其的引用。我正在尝试使用ReactFindViewUtil.findView助手来做到这一点,但无法使其正常工作。

这是到目前为止的结果:

class ReactViewManagerCustom : ReactViewManager() {
    var mCurrentActivity: Activity? = null
    override fun getName(): String = "ReactViewManagerCustom"

    override fun createViewInstance(context: ThemedReactContext): ReactViewGroup {
        mCurrentActivity = context.currentActivity
        return ReactViewGroup(context)
    }

    @ReactProp(name = "nextFocusRight")
    fun setNextFocusRight(view: View, @Nullable nativeId: String) {
        var viewGroup = mCurrentActivity?.window?.decorView?.findViewById<ViewGroup>(android.R.id.content)
        var targetView = ReactFindViewUtil.findView(viewGroup, nativeId)
        targetView?.let {
            view.nextFocusRightId = it.id
        }
    }
}

问题在于传递给viewGroup调用的findView在层次结构中的任何地方都不包含预期的View。 viewGroup是一个FrameLayout,其中包含一个孩子ReactRootView,但没有孩子。

如何使用nativeID在层次结构中的任何位置查找视图?有没有更好的方法来解决这个问题?我是android的新手,所以我可能会以错误的方式看待这个问题,因此感谢您的帮助。

0 个答案:

没有答案