更新
只是为了澄清,show()
是android.app.DialogFragment
的方法,我没有覆盖:
public void show(FragmentManager manager, String tag) {
mDismissed = false;
mShownByMe = true;
FragmentTransaction ft = manager.beginTransaction();
ft.add(this, tag);
ft.commit();
}
我们拨打以下内容,MyDialog
扩展DialogFragment
:
MyDialog dialog = new MyDialog();
dialog.show(getFragmentManager(), MyDialog.TAG);
Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG);
但f
总是null
。为什么呢?
答案 0 :(得分:1)
问题很简单,DialogFragment.show
使用异步运行的FragmentTransaction.commit
。所以它只会出现在主线程的下一次迭代中。要解决此问题,只需将这一行添加到您的代码中......
MyDialog dialog = new MyDialog();
dialog.show(getFragmentManager(), MyDialog.TAG);
// Run this line before trying to search for the fragment.
getFragmentManager().executePendingTransactions();
Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG);
答案 1 :(得分:0)
如果找到则FindFragmentByTag返回片段,否则返回null。
答案 2 :(得分:0)
添加带片段的标签
Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.container,f,MyDialog.TAG)
.commit();
并获得
Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG);