6

我正在使用 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 为空?= 真

为什么这样?

请帮我。

这是我的 Fragment 包含 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];
}

}
4

2 回答 2

5

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

看到这个答案:https ://stackoverflow.com/a/23843743/1271907

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

于 2015-01-30T10:59:38.823 回答
0

看起来您在充气机上调用了错误的方法。

尝试更改此行:

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

至:

mView = inflater.inflate(R.layout.my_page_fragments,container, null);
于 2013-01-09T04:49:36.280 回答