Я создал новый класс View
. Внутри этого класса мне нужно получить доступ к FragmentManager
, но я не могу понять, как это сделать.
Могу ли я получить доступ к FragmentManager
из контекста?
CustomView extends LinearLayout
Я создал новый класс View
. Внутри этого класса мне нужно получить доступ к FragmentManager
, но я не могу понять, как это сделать.
Могу ли я получить доступ к FragmentManager
из контекста?
CustomView extends LinearLayout
Только в том случае, если данный Контекст расширяет действие (пост-сотовый) или 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
действительно предназначен только для показа материала и не должен фактически изменять состояние вашего приложения, но это мое мнение.
если вы используете фрагменты поддержки, вы, вероятно, действительно хотите:
try {
FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
Log.e(TAG, "Can't get fragment manager");
}
Это то, что сработало для меня:
Context mContext;
...
//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();
(Конечно, вы должны сначала инициализировать mContext)
Вы можете получить доступ к 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);
}
...