android - Android 片段管理器片段更改监听器
问题描述
使用 a 替换片段FragmentManager
时,是否可以在事件完成时添加侦听器?
所以
myFragmentManager
.beginTransaction()
.replace(R.id.fragmentContainer, fragment, FRAGMENT_TAG)
.commit()
我可以添加一个监听器,myFragmentManager
以便我知道片段何时被替换?
解决方案
FragmentManager (android.support.v4.app.FragmentManager)
有一个名为的好方法registerFragmentLifecycleCallbacks
,它有助于注册一个FragmentManager.FragmentLifecycleCallbacks
. 这允许我们在片段的生命周期中采取行动。onFragmentCreated()
你可以随心所欲地做某事。
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) {
super.onFragmentPreAttached(fm, f, context);
Log.v("FragXX1", f.getTag());
}
@Override
public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) {
super.onFragmentAttached(fm, f, context);
Log.v("FragXX2", f.getTag());
}
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
super.onFragmentCreated(fm, f, savedInstanceState);
Log.v("FragXX3", f.getTag());
}
@Override
public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
super.onFragmentActivityCreated(fm, f, savedInstanceState);
Log.v("FragXX4", f.getTag());
}
@Override
public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {
super.onFragmentViewCreated(fm, f, v, savedInstanceState);
Log.v("FragXX5", f.getTag());
}
@Override
public void onFragmentStarted(FragmentManager fm, Fragment f) {
super.onFragmentStarted(fm, f);
Log.v("FragXX6", f.getTag());
}
@Override
public void onFragmentResumed(FragmentManager fm, Fragment f) {
super.onFragmentResumed(fm, f);
Log.v("FragXX7", f.getTag());
}
@Override
public void onFragmentPaused(FragmentManager fm, Fragment f) {
super.onFragmentPaused(fm, f);
Log.v("FragXX8", f.getTag());
}
@Override
public void onFragmentStopped(FragmentManager fm, Fragment f) {
super.onFragmentStopped(fm, f);
Log.v("FragXX9", f.getTag());
}
@Override
public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) {
super.onFragmentSaveInstanceState(fm, f, outState);
Log.v("FragXX10", f.getTag());
}
@Override
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
super.onFragmentViewDestroyed(fm, f);
Log.v("FragXX11", f.getTag());
}
@Override
public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
super.onFragmentDestroyed(fm, f);
Log.v("FragXX12", f.getTag());
}
@Override
public void onFragmentDetached(FragmentManager fm, Fragment f) {
super.onFragmentDetached(fm, f);
Log.v("FragXX13", f.getTag());
}
}, true);
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.container, new TradeFragment(), "trien");
ft.commit();
推荐阅读
- python - 对包含多个以零分隔的“子组”的数据框列进行统计
- javascript - 将新键添加到对象时如何重新渲染 v-for
- api - 如何在上传的网站池中实时自动下载 pdf 文件?
- go - GORM在插入时不填写外键ID
- html - Rest Api:数据显示在控制台上,但 html 表显示未定义
- javascript - 带有 event.target 的 WeakMap
- javascript - 使用纯 JavaScript 在动态生成的表上使用多个过滤器
- android - Flutter中如何在PageView中正确使用GoogleMap
- android - 在 Android 上运行时,Form 上出现奇怪的线条
- asp.net-core - 什么是最好的... ASP.NET Core 模块 processPath 到 .exe 或到 .dll