gpt4 book ai didi

android - findFragmentByTag 在 android 中返回 null

转载 作者:行者123 更新时间:2023-11-29 15:06:51 26 4
gpt4 key购买 nike

我想从其父 Activity 中调用 fragment 方法。为此,我想要 fragment 对象。

父 Activity 在框架布局中有这样的 fragment :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bottom_buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"

这是获取 fragment 对象的代码。

FragmentBottomButtons fragment = new FragmentBottomButtons();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.bottom_buttons, fragment,"FragmentTag");
//ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
//ft.addToBackStack("");
ft.commit();


/*
getSupportFragmentManager()
.beginTransaction()
.add(R.id.bottom_buttons, new FragmentBottomButtons())
.commit();

*/
frag = (FragmentBottomButtons) getSupportFragmentManager().findFragmentByTag("FragmentTag");
//fragmentBottomButtons = (FrameLayout)findViewById(R.id.bottom_buttons);
if (frag == null){
Utility.displayToast("fragmnt is null");
}

但它返回 null。

谁能帮我解决这个问题?这里有什么问题?

最佳答案

当您使用 commit() 方法时,没有人会向您保证您的 fragment 会即时附加到 FragmentManager。

发生这种情况是由于内部 FragmentManager 逻辑:当您添加\替换\删除任何 fragment 时,您会创建一个 FragmentTransaction 并将其放入 FragmentManager 内的执行队列中。实际上所有事务都在等待 FragmentManager 入队任务。

为避免这种情况,您可以通过以下方式强制将每个任务排入 Fragment 下

getSupportFragmentManager().executePendingTranscation();

此方法启动挂起的事务并确保使用 findFragmentById() 方法更加困难。

所以,最后你需要:

CustomFragment fragment = new CustomFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
//add or replace or remove fragment
ft.commit();

getSupportFragmentManager().executePendingTranscation();

CustomFragment customFragment = (CustomFragment) getSupportFragmentManager().findFragmentByTag("FragmentTag");

关于android - findFragmentByTag 在 android 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com