Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据加载到FragmentActivity中以供嵌套片段使用?_Java_Android_Android Activity_Android Asynctask - Fatal编程技术网

Java 如何将数据加载到FragmentActivity中以供嵌套片段使用?

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

我有一个包含两个片段的片段活动。这两个片段依赖于一个共享对象。对象由异步任务加载。所以这里的问题是,当活动创建并显示片段时,对象还没有加载。是否有任何方法可以暂停片段创建或类似的操作

场景如下:

碎片活动 食物碎片 棒状碎片 最后的想法 因此,正如您所看到的,我需要两个片段的相同数据,并且需要在异步任务中加载这些数据。我的理想行为是:

  • 加载主活动
  • 显示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
        }
    }