代码之家  ›  专栏  ›  技术社区  ›  batman

如何从上下文中获取支持片段管理器?

  •  1
  • batman  · 技术社区  · 7 年前

    环境

    操作系统:macOS High Sierra 10.13.4 纱线:未找到 值班员:4.9.0 Xcode:Xcode 9.2内部版本9C40b

    软件包:(通缉=>(已安装) 反应本机:0.55.4=>0.55.4

    说明

    createViewInstance 然后打算在里面添加库片段 receiveCommand 从react端看用户操作。但是,为了将片段添加到容器中,我无法从 ThemedReactContext CreateView实例 . 做 themedReactContextObj.getCurrentActivity() 产生不推荐的 android.app.FragmentManager android.support.v4.app.FragmentManager 而是在我的视图管理器中?感谢您的帮助。

    以下是我正在使用的基于SO&的一些解决方案的代码;关于显示本机片段的博客。如果我使用 android.app.Fragment android.support.v4.app.Fragment :

    package com.awesome.awesomelib
    
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.LinearLayout;
    
    import com.facebook.react.bridge.ReadableArray;
    import com.facebook.react.common.MapBuilder;
    import com.facebook.react.uimanager.SimpleViewManager;
    import com.facebook.react.uimanager.ThemedReactContext;
    import com.awesome.awesomelib.AwesomeFragment;
    
    import java.util.Map;
    
    public class AwesomeViewManager extends SimpleViewManager<View> {
    
        public static final String REACT_CLASS = "RCTAwesomeView";
        public static final int REACT_COMMAND_CREATE = 1;
    
        private ThemedReactContext mContext = null;
    
        @Override
        public String getName() {
            return REACT_CLASS;
        }
    
        @Override
        protected View createViewInstance(ThemedReactContext reactContext) {
    
            mContext = reactContext;
    
            LinearLayout layout = (LinearLayout) LayoutInflater.from(reactContext).inflate(R.layout.ll_awesomeview_container, null);
            return layout;
        }
    
        @Nullable
        @Override
        public Map<String, Integer> getCommandsMap() {
            return MapBuilder.of("create", REACT_COMMAND_CREATE);
        }
    
        @Override
        public void receiveCommand(View view, int commandId, @Nullable ReadableArray args) {
            Log.d(REACT_CLASS, "receiveCommand: " + commandId);
            switch (commandId) {
                case REACT_COMMAND_CREATE:
                    createFragment(view);
                    break;
            }
        }
    
        private void createFragment(View view) {
    
            if(mContext != null) {
    
                // load the awesome lib fragment as container
    
                AwesomeFragment awFragment = new AwesomeFragment();
                //Here's where I'm stuck !!
                mContext.getCurrentActivity().getFragmentManager().beginTransaction().add(R.id.fl_awesomeview_container, awFragment).commit();
            }
        }
    }
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   batman    7 年前

    对于其他任何遇到这种情况的人来说,这是不可能的,因为 ReactActivity 不延伸 AppCompatActivity