在onPageSelected()中访问时,片段成员variables变为null

我正在使用FragmentPagerAdapter和FragmentActivity来创建可滑动的片段。

我在pagerAdapter中的第一个片段看起来像这样。

public class MySummaryFragment extends CommonFragment implements OnPageChangeListener { private Context mContext; private View mMyView; LinearLayout mDetailLayout; TextView mDateTxtView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("onCreateView() Market summary"); mMyView = inflater.inflate(R.layout.my_page_summary_fragment_layout, container,false); mDetailLayout = (LinearLayout)mMyView.findViewById(R.id.SummaryDetailLayout); mDateTxtView = (TextView) mMyView.findViewById(R.id.txtDate); Account_Id = AccountDetails.getInstance(mContext).getClientCodes().get(0); sendRequest(Account_Id); return mMyView; } @Override public void onPageSelected(int arg0) { System.out.println("inside onPageScrollStateChanged()"); System.out.println("mMyView is null ? = "+(mMyView==null)); mDateTxtView = (TextView) mMyView.findViewById(R.id.txtMarketSummaryDate); Account_Id = AccountDetails.getInstance(mContext).getClientCodes().get(0); mDateTxtView.setText(""); sendRequest(Account_Id); } } 

这里的问题是当刷出5-6个片段并向后滑动到第一个片段时,我得到NullPointerException。

当我尝试调试时,我发现了

mMyView为空? =真

为什么这样?

请帮帮我。

这是我的片段包含FragmentPagerAdapter,

 public class MyPageDetailViewFragment extends CommonFragment { private View mView; Context mContext; OnPageChangeListener pageChangeListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.my_page_fragments, null); mContext = getActivity(); setHasOptionsMenu(false); setupSearchBarComponent(); PagerTabStrip pagerTabStrip = (PagerTabStrip)mView. findViewById(R.id.pager_title_strip); pagerTabStrip.setDrawFullUnderline(true); pagerTabStrip.setTabIndicatorColor(Color.BLACK); /** Getting a reference to the ViewPager defined the layout file */ ViewPager pager = (ViewPager) mView.findViewById(R.id.pager); /** Getting fragment manager */ FragmentManager fm = ((HomeScreenActivity)mContext).getSupportFragmentManager(); /** Instantiating FragmentPagerAdapter */ final MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); pager.setAdapter(pagerAdapter); pager.setCurrentItem(0); pageChangeListener = new OnPageChangeListener() { @Override public void onPageSelected(int selectedIndex) { System.out.println("selectedIndex = "+selectedIndex); Object page = pagerAdapter.getItem(selectedIndex); if( page instanceof OnPageChangeListener){ ((OnPageChangeListener) page).onPageSelected(selectedIndex); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }; pager.setOnPageChangeListener(pageChangeListener); return mView; // return super.onCreateView(inflater, container, savedInstanceState); } 

这是我的实现MyFragmentPagerAdapter,

 public class MyFragmentPagerAdapter extends FragmentPagerAdapter { /** Constructor of the class */ public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } /** This method will be invoked when a page is requested to create */ @Override public Fragment getItem(int index) { System.out.println("getItem = "+index); Bundle data = new Bundle(); data.putInt("current_page", index + 1); CommonFragment fragment = getFragment(index); fragment.setArguments(data); return fragment; } public CommonFragment getFragment(int index) { CommonFragment fragment = null; if(fragment == null){ if(index == 0){ fragment = new MySummaryFragment(); }else if(index == 1){ fragment = new FragmentOne(); }else if(index == 4){ fragment = new FragmentFour(); }else if(index == 5){ fragment = new FragmentFive(); }else{ fragment = new MyFragment(); } } return fragment; } /** Returns the number of pages */ @Override public int getCount() { return titles.length; } @Override public CharSequence getPageTitle(int position) { return titles[position]; } } 

pagerAdapter.getItem(selectedIndex)实际上创建了片段的新实例。

请参阅此答案: https : //stackoverflow.com/a/23843743/1271907

您必须保留对实际片段的引用。

看起来你在inflater上调用了错误的方法。

尝试更改此行:

 mView = inflater.inflate(R.layout.my_page_fragments, null); 

至:

 mView = inflater.inflate(R.layout.my_page_fragments,container, null);