所以我的问题基本上是我的 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/