mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-06 22:38:37 +08:00
allow finding the rootTag of any reactTag inside UIManager
Summary: added API to in UIManager to find the rootTag/View of any reactTag based on its layout (shadow views) hierarchy (not to be used by JS) Reviewed By: javache Differential Revision: D3750410 fbshipit-source-id: 68611e39930d53ece478f25245ddc7f7838daaa6
This commit is contained in:
committed by
Facebook Github Bot 9
parent
6729df3f28
commit
35e7a266db
@@ -13,6 +13,7 @@ import javax.annotation.Nullable;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.csslayout.CSSLayoutContext;
|
||||
import com.facebook.csslayout.CSSDirection;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
@@ -24,6 +25,7 @@ import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.bridge.UiThreadUtil;
|
||||
import com.facebook.react.bridge.WritableArray;
|
||||
import com.facebook.react.common.ReactConstants;
|
||||
import com.facebook.react.modules.i18nmanager.I18nUtil;
|
||||
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
|
||||
import com.facebook.react.uimanager.events.EventDispatcher;
|
||||
@@ -575,7 +577,6 @@ public class UIImplementation {
|
||||
mOperationsQueue.enqueueConfigureLayoutAnimation(config, success, error);
|
||||
}
|
||||
|
||||
|
||||
public void setJSResponder(int reactTag, boolean blockNativeResponder) {
|
||||
assertViewExists(reactTag, "setJSResponder");
|
||||
ReactShadowNode node = mShadowNodeRegistry.getNode(reactTag);
|
||||
@@ -789,4 +790,22 @@ public class UIImplementation {
|
||||
public void addUIBlock(UIBlock block) {
|
||||
mOperationsQueue.enqueueUIBlock(block);
|
||||
}
|
||||
|
||||
public int resolveRootTagFromReactTag(int reactTag) {
|
||||
if (mShadowNodeRegistry.isRootNode(reactTag)) {
|
||||
return reactTag;
|
||||
}
|
||||
|
||||
ReactShadowNode node = resolveShadowNode(reactTag);
|
||||
int rootTag = 0;
|
||||
if (node != null) {
|
||||
rootTag = node.getRootNode().getReactTag();
|
||||
} else {
|
||||
FLog.w(
|
||||
ReactConstants.TAG,
|
||||
"Warning : attempted to resolve a non-existent react shadow node. reactTag=" + reactTag);
|
||||
}
|
||||
|
||||
return rootTag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -518,4 +518,17 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
|
||||
public void addUIBlock (UIBlock block) {
|
||||
mUIImplementation.addUIBlock(block);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a reactTag from a component, find its root node tag, if possible.
|
||||
* Otherwise, this will return 0. If the reactTag belongs to a root node, this
|
||||
* will return the same reactTag.
|
||||
*
|
||||
* @param reactTag the component tag
|
||||
*
|
||||
* @return the rootTag
|
||||
*/
|
||||
public int resolveRootTagFromReactTag(int reactTag) {
|
||||
return mUIImplementation.resolveRootTagFromReactTag(reactTag);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user