我的活动中有一些片段。
private MainFragment mMainFragment;
... //other fragments
这是我的PagerAdapter。
private class MainPagerAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int position) {
if (DEBUG) {
Log.w(TAG, "position: " + position);
}
if (position == 0) {
mMainFragment = MainFragment.newInstance(PAGE_MAIN_INDEX);
return mMainFragment;
}
}
@Override
public int getCount() {
return FRAGMENT_COUNT;
}
}
有时,当我的应用程序转到后台时,系统会终止活动,然后如果我的应用程序返回到前台,系统会尝试恢复我的页面。看起来一切都很好,每个视图都能正确显示。
但是当我尝试刷新我的片段时,我的应用程序崩溃了。日志显示片段为空。我不知道为什么。有什么想法吗?
这是我的Fragment.onCreate(Bundle savedInstanceState)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = (SubmitTenderActivity) getActivity();
mInflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mResources = getResources();
}
答案 0 :(得分:1)
尝试这样的事情
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
default:
break;
}
return null;
}
答案 1 :(得分:1)
getItem()
不再被调用,因此恢复后mMainFragment
为空。对于框架正在恢复的每个Fragment调用instantiateItem()
方法,因此您必须在此方法中再次重新分配mMainFragment。如下所示,更改您的代码可以解决您的问题:
private class MainPagerAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int position) {
if (DEBUG) {
Log.w(TAG, "position: " + position);
}
if (position == 0) {
mMainFragment = MainFragment.newInstance(PAGE_MAIN_INDEX);
return mMainFragment;
}
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Object obj = super.instantiateItem(container, position);
if (position == 0) {
mMainFragment = (MainFragment)obj;
}
return obj;
}
@Override
public int getCount() {
return FRAGMENT_COUNT;
}
}
答案 2 :(得分:0)
最好在片段中使用以下方法:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = activity;
}
答案 3 :(得分:0)
我认为你应该将返回的mMainFragment移出方法getItem中的if语句。
答案 4 :(得分:0)
为什么不试试这个?它对我来说很好。
public class UpdateTabsAdapter extends FragmentPagerAdapter {
public UpdateTabsAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new AcademicDocumentsFragment();
case 1:
return new EmployementDocumentsFragment();
case 2:
return new UploadPhotoDetailsFragment();
}
return null;
}
@Override
public int getCount() {
return 3;
}
}