作为查看器预加载其中使用的片段的+1和-1。我有一个使用asyntask的数据加载,我希望只有当我在页面本身时才执行。
我应该在哪里执行这个函数?oncreate似乎对我不起作用
发布于 2013-06-20 04:43:14
Tanis提供的解决方案应该是有效的,但是有人认为应该考虑到这一点。由于AsyncTask是从Activity启动的,因此在处理配置更改时可能会遇到一些问题。也许直接从片段开始AsyncTask会更有意义。
那么解决方案将是使当前显示的片段意识到他是现在显示的片段。
首先,您的活动中应该有一个方法,该方法将从ViewPager返回当前片段的位置
public class MainActivity extends Activity{
//....
public int getViewPagerCurrentIndex() {
return pager.getCurrentItem();
}
}其次,在getItem()方法的PagerAdapter中,将当前项的位置作为参数传递给片段:
public class MyPagerAdapter extends FragmentStatePagerAdapter {
//....
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(position);
}
}最后,在MyFragment中检查从MainActivity返回的位置和实例化片段时收到的位置是否匹配。如果它们匹配,则此片段实例可见:
public static MyFragment newInstance(int position) {
MyFragment fragment = new MyFragment ();
Bundle args = new Bundle();
args.putInt(KEY_POSITION, position);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
if (getArguments() != null) {
fragmentPosition = getArguments().getInt(KEY_POSITION);
}
}
// It does not matter where this method is called, the AsyncTask will be started only for the currently visible fragment.
private void executeAsyncTask(){
MainActivity mainActivity = (MainActivity)getActivity();
if (mainActivity.getViewPagerCurrentIndex() == fragmentPosition ) {
new MyAsyncTask().execute();
}
}https://stackoverflow.com/questions/17200369
复制相似问题