Java 如何将数据加载到FragmentActivity中以供嵌套片段使用?
我有一个包含两个片段的片段活动。这两个片段依赖于一个共享对象。对象由异步任务加载。所以这里的问题是,当活动创建并显示片段时,对象还没有加载。是否有任何方法可以暂停片段创建或类似的操作 场景如下: 碎片活动 食物碎片 棒状碎片 最后的想法 因此,正如您所看到的,我需要两个片段的相同数据,并且需要在异步任务中加载这些数据。我的理想行为是:Java 如何将数据加载到FragmentActivity中以供嵌套片段使用?,java,android,android-activity,android-asynctask,Java,Android,Android Activity,Android Asynctask,我有一个包含两个片段的片段活动。这两个片段依赖于一个共享对象。对象由异步任务加载。所以这里的问题是,当活动创建并显示片段时,对象还没有加载。是否有任何方法可以暂停片段创建或类似的操作 场景如下: 碎片活动 食物碎片 棒状碎片 最后的想法 因此,正如您所看到的,我需要两个片段的相同数据,并且需要在异步任务中加载这些数据。我的理想行为是: 加载主活动 显示ProgressDialog并在后台加载数据 取消进程对话框 显示片段并使用数据 你做错了。你不应该暂停任何事情。相反,当父活动加载所需内容时,它
你做错了。你不应该暂停任何事情。相反,当父活动加载所需内容时,它应该告诉片段这一点。事实上,通过使用侦听器,我会使它有所不同,因此我的片段需要在创建时注册,加载我的数据的对象在加载任务完成后会广播回消息。您这样做是错误的。你不应该暂停任何事情。相反,当父活动加载所需内容时,它应该告诉片段这一点。事实上,通过使用侦听器,我会使它有所不同,所以我的片段需要在创建时注册,加载我的数据的对象在加载任务完成后会将消息广播回来
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;
}
}
}
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
}
}
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
}
}