第一次后,未显示Viewpager片段。

24 浏览
0 Comments

第一次后,未显示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等)?

0