findFragmentByTag()返回null

时间:2016-03-07 13:11:24

标签: android android-fragments

更新 只是为了澄清,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。为什么呢?

3 个答案:

答案 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);