java - 最初加载 Fragment 时,将数据从 Activity 传递到 Fragment

标签 java android android-fragments

所以我的问题基本上是我的 MainActivity 最初加载了一个 fragment ,我们称之为 MyFragment。

我正在从网上加载 JSON 并希望传递到我的 MyFragment。

问题出在MainActivity中调用setContentView时,调用的是MyFragment中的onCreateView,其中包含getArguments.getSerializable("myTag")。 key 未通过,因为我还没有加载 JSON。

你能帮我解决这个问题吗?

这是我的代码:

在我的 fragment 中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        if(getArguments() != null) {
            coll = (HashSet<String>) getArguments().getSerializable("myTag");
        }
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_my, container, false);
}

MainActivity(假设我已经加载了我的 JSON):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    loadJSON();
    passTagsToFragment(); //passes to the fragment
}

public void passTagsToFragment(){
    Bundle bundle = new Bundle();
    bundle.putSerializable("myTags", tagsSet);
    TagsFragment frag = new MyFragment();
    frag.setArguments(bundle);
}

编辑:

基本上,我的问题是我想在开始加载 Fragment 之前完全加载 MainActivity。不确定该怎么做。

编辑 2:

我在这里解决了问题是我的代码:(更改了变量名称)

主 Activity .java

public TagsFragment passInfoToTagsFramgent(){
    Bundle bundle = new Bundle();
    bundle.putSerializable("tags", tagsList);
    TagsFragment frag = new TagsFragment();
    frag.setArguments(bundle);
    return frag;
}

在 MainActvity.java 的 OnPostExecute 中:

Fragment tagFragment = passInfoToTagsFramgent();
                FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container, tagFragment);
                transaction.commit();

最佳答案

当所有 json 数据加载完毕后,您应该在异步任务的执行后方法中调用您的 passTagsToFragment() 方法。

 protected void onPostExecute(Long result) {
     passTagsToFragment();
 }

关于java - 最初加载 Fragment 时,将数据从 Activity 传递到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52324244/

相关文章:

java - 导出为 .jar 文件后出现 FileNotFoundException

java - Apache HttpClient : setConnectTimeout() vs. setConnectionTimeToLive() 与 setSocketTimeout()

android - fragment 与其他 fragment 重叠

android - 使用来自 kotlinx-coroutine-test 的类时出错

java - 我来自 XML 的 VIEWS 或 WIDGETS 无法在扩展 fragment 类的类上使用 java

java - 将 FrameLayout 转换为 Fragment

java - Hibernate 搜索 - 无法执行工作。实体类不是@Indexed,也不是@ContainedIn

java - 在 java 或 UE4 c++ 中获取三星 Galaxy S7 的真实屏幕分辨率

安卓单元测试 : connectedAndroidTest does not execute my test case

java - 设置Alarm时Intent.getSerializedExtra(obj)在BroadcastReceiver的onReceive中返回null