#java #android #activity #reactjs #react_native
Нужно подключить компонент: public class MyComponent extends Activity { ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.myComponent); ... } ... } Для него создаю класс Manager: public class MyComponentManager extends SimpleViewManager{ public static final String REACT_CLASS = "MyComponent"; @Override public String getName() { return REACT_CLASS; } private ThemedReactContext mContext = null; private Activity mActivity = null; @Override protected MyComponent createViewInstance(ThemedReactContext context) { mContext = context; return new MyComponent(mContext); } public MyComponentManager(Activity activity) { mActivity = activity; } } ,класс Package: public class MyComponentPackage implements ReactPackage { private Activity mActivity = null; public MyComponentPackage(Activity activity) { mActivity = activity; } @Override public List createNativeModules(ReactApplicationContext reactContext) { return Collections.emptyList(); } @Override public List > createJSModules() { return Collections.emptyList(); } @Override public List createViewManagers(ReactApplicationContext reactContext) { return Arrays. asList( new MyComponentManager(mActivity) ); } } и достаю его в файле myComponent.js: import React from 'react'; import { View, requireNativeComponent } from 'react-native'; export default requireNativeComponent('MyComponent'); Только в MyComponentManager в SimpleViewManager должен подаваться class extends View, а у меня - Activity. Как мне подключить мой компонент?
Ответы
Ответ 1
А есть необходимость ваш компонент наследовать от активити? Если нет необходимости - делайте кастом вью: public class MyComponent extends FrameLayout { public MyComponent(Context context) { super(context); Layoutinflater.from(context).inflate(R.layout.myComponent, this, true); } ... }Ответ 2
В общем, класс Package всего-то нужно зарегистрировать в файле MainApplication.java: @Override protected ListgetPackages() { return Arrays. asList( new MainReactPackage(), new MyComponentPackage() ); } До этого, конечно, можно и самому додуматься, но тот факт, что официальном мануале ни единого упоминания про это, вводит в заблуждение. Также в myComponent.js нужно указать дефолтные проптайпы: import React, { PropTypes } from 'react'; import { View, requireNativeComponent } from 'react-native'; let iface = { name: 'MyComponent', propTypes: { ...View.propTypes } }; export default requireNativeComponent('MyComponent', iface); Наследовать от вью мою активити не нужно, а просто из вью класса её запустить: Intent newIntent = new Intent(context, MyComponent.class); newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(newIntent);
Комментариев нет:
Отправить комментарий