Как получить менеджер фрагментов поддержки из ThemedReactContext? - PullRequest
0 голосов
/ 27 сентября 2018

Среда

Среда: ОС: macOS High Sierra 10.13.4 Узел: 8.11.3 Пряжа: Не найдено npm: 5.6.0 Сторож: 4.9.0 Xcode: Xcode 9.2 Версия сборки 9C40b Android Studio: 3.1AI-173.4907809

Пакеты: (хотел => установлен) реагирует: ^ 16.4.2 => 16.4.2 Реактивен: 0,55,4 => 0,55,4

Описание

Я пишу собственную нативную библиотеку Android, которая предоставляет фрагмент поддержки для отображения.Я создал простой менеджер представлений на андроидной стороне реакции, в котором я возвращаю макет заполнителя (просто макет фрейма внутри родительского линейного макета для замены на макет фрагмента позже) в createViewInstance и позже намереваюсь добавить фрагмент библиотеки внутриreceiveCommand на действия пользователя со стороны реакции.Однако для добавления фрагмента в контейнер я не могу получить менеджер фрагментов поддержки из ThemedReactContext объекта, который я записал в createViewInstance.Выполнение 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();
        }
    }
}

Поскольку getFragmentManager () устарел, как я могу получить менеджер фрагментов поддержки из ThemedReactContext?

1 Ответ

0 голосов
/ 28 сентября 2018

Для тех, кто сталкивается с этим, в настоящее время это невозможно, поскольку ReactActivity не расширяет AppCompatActivity, что внутренне расширяет FragmentActivity, которая затем обеспечивает доступ к менеджеру поддержки фрагментов.Пул-запрос открыт на странице github реагирования, которая решает эту проблему с указанием временной шкалы, пока не выпущенной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...