gpt4 book ai didi

android - setArguments() 到 fragment 时“fragment 已经激活”

转载 作者:太空狗 更新时间:2023-10-29 13:20:50 25 4
gpt4 key购买 nike

我有一个 Activity,它承载一个 Fragment

Activity 布局文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment class="com.my.ContentFragment"
android:id="@+id/fragment_content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>

Activity的Java代码:

import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;

public class ContentActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//data from previous Activity
Bundle data = getIntent().getExtras();

Fragment contentFragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_content);

// Pass data to fragment
/*java.lang.IllegalStateException: Fragment already active*/
contentFragment.setArguments(data);
}
...
}

我尝试在 Activity 的 onCreate() 中找到 fragment ,然后将一些数据传递给它。但是当我 contentFragment.setArguments(data); 时,我得到 java.lang.IllegalStateException: Fragment already active

然后我还检查了 contentFragment.getArguments() 为 null。那么,为什么我不能为我的 fragment 设置参数?

如果无法通过这种方式将 bundle 传递给 fragment,我该如何将 bundle 传递给 fragment?

最佳答案

Arguments 通常在 Fragment.onCreate() 中读取。如果您从 xml 布局中扩充 fragment ,则 fragment 已经通过 FragmentManager 添加到 Activity 中并且不能再接受争论了。

如果 fragment 需要参数,您最好以编程方式将其添加到 FragmentManager 而不是使用 xml 方式。我鼓励你看看this文档,其中解释了正确的 fragment 生命周期以及如何正确地将此 fragment 附加到 Activity 。

顺便说一句。你可能会发现 FragmentArgs有用。

关于android - setArguments() 到 fragment 时“fragment 已经激活”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194026/

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