我有一个带有两个 Fragment 的 FragmentActivity。这两个 Fragment 依赖于一个共享对象。该对象由 AsyncTask 加载。所以这里的问题是,当 Activity 创建并显示 fragment 时,对象尚未加载。是否有任何方法可以暂停 Fragment 创建或类似的方法?
场景是这样的:
FragmentActivity
public class MainActivity extends FragmentActivity {
private Object sharedObject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new FooAsyncTask(...).execute();
}
...
public void onAsyncTaskCompleted(result) {
sharedObject = result;
}
// Pager adapter -------------------------------------------------------
private class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return FooFragment.newInstance(sharedObject);
case 1:
return BarFragment.newInstance(sharedObject);
default:
throw new IllegalStateException();
}
}
@Override
public String getPageTitle(int position) {
switch(position) {
case 0:
return "Foo";
case 1:
return "Bar";
default:
throw new IllegalStateException();
}
}
@Override
public int getCount() {
return 2;
}
}
}
FooFragment
public class FooFragment extends Fragment {
public FooFragment newInstance(Object sharedObject) {
FooFragment f = new FooFragment();
f.setObject(sharedObject);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
// Here I use the object to show data
}
}
BarFragment
public class BarFragment extends Fragment {
public BarFragment newInstance(Object sharedObject) {
BarFragment f = new BarFragment();
f.setObject(sharedObject);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
// Here I use the object to show data
}
}
最终想法
因此,如您所见,我需要两个 fragment 具有相同的数据,并且该数据需要加载到 AsyncTask 中。对我来说理想的行为是:
- 加载MainActivity
- 显示 ProgressDialog 并在后台加载数据
- 关闭进度对话框
- 显示 fragment 并使用数据
最佳答案
你这样做是错误的。你不应该暂停任何事情。相反,当父 Activity 加载所需内容时,它应该告诉 fragment 这一点。事实上,我会采取不同的方式 - 通过使用监听器 - 因此我的 fragment 需要在创建时注册,并且加载我的数据的对象将在加载任务完成后广播消息。
关于java - 如何将数据加载到 FragmentActivity 中以供嵌套 fragment 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489164/