【问题标题】:findFragmentByTag() returns nullfindFragmentByTag() 返回 null
【发布时间】:2016-03-07 13:11:23
【问题描述】:

更新: 澄清一下,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。为什么?

【问题讨论】:

标签: android android-fragments


【解决方案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);

【讨论】:

    【解决方案2】:

    使用片段添加标签

    Fragment fragmentA = new FragmentA();
    getFragmentManager().beginTransaction()
        .replace(R.id.container,f,MyDialog.TAG)
        .commit(); 
    

    得到

    Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG);
    

    【讨论】:

    【解决方案3】:

    FindFragmentByTag 如果找到则返回片段,否则返回 null。

    【讨论】:

    • 当然。问题是为什么它找不到最近添加的片段。
    猜你喜欢
    • 2017-12-22
    • 2018-07-14
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多