下面列出了android.support.v4.app.FragmentManager#FragmentLifecycleCallbacks ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
//当所有模块集成到宿主 App 时, 在 App 中已经执行了以下代码, 所以不需要再执行
if (BuildConfig.IS_BUILD_MODULE) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentDestroyed(FragmentManager fm, android.support.v4.app.Fragment f) {
((RefWatcher) ArmsUtils
.obtainAppComponentFromContext(f.getActivity())
.extras()
.get(RefWatcher.class.getName()))
.watch(f);
}
});
}
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
//当所有模块集成到宿主 App 时, 在 App 中已经执行了以下代码, 所以不需要再执行
if (BuildConfig.IS_BUILD_MODULE) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentDestroyed(FragmentManager fm, android.support.v4.app.Fragment f) {
((RefWatcher) ArmsUtils
.obtainAppComponentFromContext(f.getActivity())
.extras()
.get(RefWatcher.class.getName()))
.watch(f);
}
});
}
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
//当所有模块集成到宿主 App 时, 在 App 中已经执行了以下代码, 所以不需要再执行
if (BuildConfig.IS_BUILD_MODULE) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentDestroyed(FragmentManager fm, android.support.v4.app.Fragment f) {
((RefWatcher) ArmsUtils
.obtainAppComponentFromContext(f.getActivity())
.extras()
.get(RefWatcher.class.getName()))
.watch(f);
}
});
}
}
/**
* 给每个 Activity 的所有 Fragment 设置监听其生命周期, Activity 可以通过 {@link IActivity#useFragment()}
* 设置是否使用监听,如果这个 Activity 返回 false 的话,这个 Activity 下面的所有 Fragment 将不能使用 {@link FragmentDelegate}
* 意味着 {@link BaseFragment} 也不能使用
*
* @param activity
*/
private void registerFragmentCallbacks(Activity activity) {
boolean useFragment = activity instanceof IActivity ? ((IActivity) activity).useFragment() : true;
if (activity instanceof FragmentActivity && useFragment) {
if (mFragmentLifecycle == null) {
mFragmentLifecycle = new FragmentLifecycle();
}
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycle, true);
if (mFragmentLifecycles == null && mExtras.containsKey(ConfigModule.class.getName())) {
mFragmentLifecycles = new ArrayList<>();
List<ConfigModule> modules = (List<ConfigModule>) mExtras.get(ConfigModule.class.getName());
for (ConfigModule module : modules) {
module.injectFragmentLifecycle(mApplication, mFragmentLifecycles);
}
mExtras.remove(ConfigModule.class.getName());
}
for (FragmentManager.FragmentLifecycleCallbacks fragmentLifecycle : mFragmentLifecycles) {
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(fragmentLifecycle, true);
}
}
}
/**
* 给每个 Activity 的所有 Fragment 设置监听其生命周期, Activity 可以通过 {@link IActivity#useFragment()}
* 设置是否使用监听,如果这个 Activity 返回 false 的话,这个 Activity 下面的所有 Fragment 将不能使用 {@link FragmentDelegate}
*
* @param activity: Activity
*/
private void registerFragmentCallbacks(Activity activity) {
boolean useFragment = !(activity instanceof IActivity) || ((IActivity) activity).useFragment();
if (activity instanceof FragmentActivity && useFragment) {
if (mFragmentLifecycle == null) {
mFragmentLifecycle = new FragmentLifecycle();
}
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycle, true);
if (mFragmentLifecycles == null && mExtras.containsKey(ConfigLifecycle.class.getName())) {
mFragmentLifecycles = new ArrayList<>();
List<ConfigLifecycle> lifecycles = (List<ConfigLifecycle>) mExtras.get(ConfigLifecycle.class.getName());
for (ConfigLifecycle lifecycle : lifecycles) {
lifecycle.injectFragmentLifecycle(mApplication, mFragmentLifecycles);
}
mExtras.remove(ConfigLifecycle.class.getName());
}
for (FragmentManager.FragmentLifecycleCallbacks fragmentLifecycle : mFragmentLifecycles) {
((FragmentActivity) activity).getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(fragmentLifecycle, true);
}
}
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
((RefWatcher) ArmsUtils
.obtainAppComponentFromContext(f.getActivity())
.extras()
.get(RefWatcher.class.getName()))
.watch(f);
}
});
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
((RefWatcher) ArmsUtils
.obtainAppComponentFromContext(f.getActivity())
.extras()
.get(RefWatcher.class.getName()))
.watch(f);
}
});
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
// 在配置变化的时候将这个 Fragment 保存下来,在 Activity 由于配置变化重建是重复利用已经创建的Fragment。
// https://developer.android.com/reference/android/app/Fragment.html?hl=zh-cn#setRetainInstance(boolean)
// 在 Activity 中绑定少量的 Fragment 建议这样做,如果需要绑定较多的 Fragment 不建议设置此参数,如 ViewPager 需要展示较多 Fragment
f.setRetainInstance(true);
}
});
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
lifecycles.add(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
((RefWatcher) ArmsUtils
.obtainAppComponentFromContext(f.getActivity())
.extras()
.get(RefWatcher.class.getName()))
.watch(f);
}
});
}
private void registerFragmentLifecycleCallbacks() {
final FragmentManager manager = getFragmentManager();
fragmentLifecycleCallbacks = new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentAttached(@NonNull final FragmentManager fm, @NonNull final Fragment fragment,
@NonNull final Context context) {
if (fragment instanceof OfflineMethodsFragment) {
presenter.onOtherPaymentMethodClickableStateChanged(false);
}
super.onFragmentAttached(fm, fragment, context);
}
@Override
public void onFragmentDetached(@NonNull final FragmentManager fm, @NonNull final Fragment fragment) {
if (fragment instanceof ExpressPaymentFragment) {
fm.unregisterFragmentLifecycleCallbacks(this);
} else if (fragment instanceof OfflineMethodsFragment) {
bottomSheet.setVisibility(GONE);
presenter.onOtherPaymentMethodClickableStateChanged(true);
}
super.onFragmentDetached(fm, fragment);
}
};
if (manager != null) {
manager.registerFragmentLifecycleCallbacks(fragmentLifecycleCallbacks, false);
}
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
lifecycles.add(new FragmentLifecycleCallbacksImpl());
}
@Singleton
@Provides
static List<FragmentManager.FragmentLifecycleCallbacks> provideFragmentLifecycles() {
return new ArrayList<>();
}
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
//向Fragment的生命周期中注入一些自定义逻辑
}
/**
* 使用{@link FragmentManager.FragmentLifecycleCallbacks}在Fragment的生命周期中注入一些操作
*
* @param context
* @param lifecycles
*/
void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles);
@Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
}
/**
* 使用{@link FragmentManager.FragmentLifecycleCallbacks}在Fragment的生命周期中注入一些操作
*
* @param context
* @param lifecycles
*/
void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles);
/**
* 使用 {@link FragmentManager.FragmentLifecycleCallbacks} 在 Fragment 的生命周期中注入一些操作
*
* @param context: Context
* @param lifecycles: List<FragmentManager.FragmentLifecycleCallbacks>
*/
void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles);