第一次后,未显示Viewpager片段。
第一次后,未显示Viewpager片段。
我有一个由3个片段(A,B,C)组成的活动。片段A包含一个带有2个ListFragments的ViewPager。用户可以点击任何列表片段中的项目,并通过这样做跳转到片段B。
在片段A中,我做了以下操作:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
pagerAdapter = new PagerAdapter(getActivity().getSupportFragmentManager());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentA, container, false);
vpPager = (ViewPager)view.findViewById(R.id.vpPager);
vpPager.setOffscreenPageLimit(2);
vpPager.setAdapter(pagerAdapter);
vpPager.addOnPageChangeListener(this);
return view;
}
PagerAdapter 如下:
private class PagerAdapter extends FragmentPagerAdapter {
private final ListFragment1 lf1 = ListFragment1 .newInstance();
private final ListFragment2 lf2 = ListFragment2 .newInstance();
public PagerAdapter(android.support.v4.app.FragmentManager fm) {
super(fm);
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
switch (position) {
case 0: return lf1;
case 1: return lf2;
default: return null;
}
}
}
第一次显示活动时,视图页片段正确显示。
2个视图页片段从数据库加载数据,我只在创建片段时执行一次。
用户可以点击一个项目,显示片段B。如果用户按下返回按钮,则显示片段A。但是列表片段不会显示(它们的实例已经存在)。
可能是视图已被销毁,尽管实例仍然存在吗?
这里有什么问题?有更好的方法吗?
编辑
如果我在pager适配器中使用newInstance,我会得到一个IllegalStateException:not attached to activity。这是因为我使用以下方式启动异步任务:
@Override
public void onPageSelected(int position) {
Fragment fragment = pagerAdapter.getItem(position);
if (fragment instanceof IPagedFragment) {
((IPagedFragment) fragment).onShown();
}
}
并且onShown如下:
@Override
public void onShown() {
myTask= new MyTask();
myTask.execute((Void)null);
}
我何时可以启动任务以确保片段已连接到活动并且视图已创建(我需要从布局中获取listview等)?