Подтвердить что ты не робот

FragmentManager из контекста

Я создал новый класс View. Внутри этого класса мне нужно получить доступ к FragmentManager, но я не могу понять, как это сделать.

Могу ли я получить доступ к FragmentManager из контекста?

CustomView extends LinearLayout
4b9b3361

Ответ 1

Только в том случае, если данный Контекст расширяет действие (пост-сотовый) или FragmentActivity (pre-honeycomb).

В этом случае вам нужно сделать 100% уверенным, что это действие, использующее отражение или попытку.

try{
  final Activity activity = (Activity) context;

  // Return the fragment manager
  return activity.getFragmentManager();

  // If using the Support lib.
  // return activity.getSupportFragmentManager(); 

} catch (ClassCastException e) {
  Log.d(TAG, "Can't get the fragment manager with this");
}

Думаю, я рекомендую рефакторинг, поэтому View действительно предназначен только для показа материала и не должен фактически изменять состояние вашего приложения, но это мое мнение.

Ответ 2

если вы используете фрагменты поддержки, вы, вероятно, действительно хотите:

try {
  FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
  Log.e(TAG, "Can't get fragment manager");
}

Ответ 3

Это то, что сработало для меня:

Context mContext;
...


//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();

(Конечно, вы должны сначала инициализировать mContext)

Ответ 4

Вы можете получить доступ к FragmentManager (или SupportFragmentManager) в приложении, но, как предлагают другие ответы, вы можете сделать это только через экземпляр Activity.

Однако вы можете получить доступ к FragmentManager через Activity, не требуя прямого вызова каких-либо действий с помощью интерфейса ActivityLifecycleCallbacks:

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks {

    @Override
    public void onActivityCreated(Activity activity, Bundle bundle) {
        activity.getFragmentManager()
        if(activity instanceof FragmentActivity) {
            ((FragmentActivity)activity).getSupportFragmentManager();
        }
        unregisterActivityLifecycleCallbacks(this);
    }

    ...