在数据加载时,哪个是向片段显示加载符号的最佳方法?

时间:2013-12-15 10:26:02

标签: android android-fragments android-asynctask android-viewpager

我们在其中使用 viewpager 片段,我们希望在 viewpager 显示片段和加载数据时显示每一页,因为它可以节省大量内存,但我们可以在数据加载时没有显示加载的符号,我们在asynctask的onPreExecute调用时替换了一个片段,我们在调用onPostExecute时再次替换,但是有一些错误,这是显示加载符号的最佳方式何时加载数据?

public class TestFragment extends Fragment {
    private FragmentManager manager = null;

    private class TestTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub

            getFragmentManager().beginTransaction()
                    .replace(R.id.content_container, new LoadingFragment())
                    .commit();
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.content_container, new ContentFragment())
                    .commit();
            super.onPostExecute(result);
        }
    }

    public TestFragment(FragmentManager supportFragmentManager) {
        this.manager = supportFragmentManager;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new TestTask().execute();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.empty_page, null);
    }

}

2 个答案:

答案 0 :(得分:4)

如果您在应用中使用操作栏,另一种简单方法是在supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);之后立即调用FragmentActivity中的super.onCreate(savedInstanceState);,并从子片段((ActionBarActivity)getActivity()).setSupportProgressBarIndeterminateVisibility(visibility);中显示或隐藏进度条托管活动的操作栏取决于您在AsyncTask中的进度。

注意:我正在使用支持appcompat,但我很确定如果使用ActionBarSherlock,方法是相同的。

答案 1 :(得分:1)

在片段的布局中添加一个进度条,但将其定义为不可见,并将其垂直和水平居中。然后在onPreExecute中设置Visibility.GONE的所有其他视图的可见性,并将进度条设置为VISIBLE。在onPostExecute()方法中反转这个!