Viewpager松散片段连接低内存杀死

时间:2014-02-20 17:45:48

标签: java android android-viewpager fragment low-memory

在我的活动中我使用了viewpager。我创建了两个片段并附加到视图分页器,并不时在我的活动中从这些片段中调用一些方法..然后应用程序在低内存中被杀死,重新创建的片段在那里,但没有与viewpager somehome连接..我可以不要调用MyFragment.mymethod()..它说MyFragment为null

 public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            if(position==0){
                if(homeFragment==null){
                    homeFragment=new HomeFragment();
                }
                return homeFragment;
            }else{
                if(mapFragment==null){
                    mapFragment=new Map();
                }
                return mapFragment;
            }
        }

。 。

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id==R.id.action_search){
            return true;
        }else if(id==R.id.action_feedback){

        }else if(id==R.id.action_rate_me){

        }else if(id==R.id.action_show_favorites ){
            if(mViewPager.getCurrentItem()!=0){
                mViewPager.setCurrentItem(0);
            }
            homeFragment.populateListWithFavorites();
            return true;

        }else if(id==R.id.action_history){
            if(mViewPager.getCurrentItem()!=0){
                mViewPager.setCurrentItem(0);
            }
            homeFragment.populateListWithHistory();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

2 个答案:

答案 0 :(得分:2)

我找到了解决方案......

它真的像是说我的主要活动中的片段变量被清除所以我不再与片段连接..我所做的是在onAttach()我将我的片段再次链接到mainActivity变量

@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mActivity = activity;
        ((RestaurantActivityViewPager)mActivity).menuFragment=this;
    }
    public static MenuFragment newInstance(int sectionNumber) {
        MenuFragment fragment = new MenuFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

答案 1 :(得分:1)

如果您通过此代码获得tabFragment

Fragment fragment = mPagerAdapter.getItem(position);

低内存导致该错误。 试试这个

fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":"+position);