我们在其中使用 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);
}
}
答案 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()方法中反转这个!