低存储器杀Viewpager松动片段连接(Viewpager loose fragment conn

2019-09-27 14:37发布

在我的活动我使用viewpager。 我创建了两个片段,并连接到视图寻呼机和不时打电话从这个片段在我的活动一些方法.. AFER应用被杀死在低内存和重建片段存在,但与viewpager somehome没有任何联系。我可以不叫MyFragment.mymethod()..它说MyFragment为空

 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);
    }

Answer 1:

我找到了解决办法....

它真的像说,在主要活动我的片段变量被清除,所以我不得不碎片没有关系了..我的所作所为是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;
    }


Answer 2:

如果通过这个代码得到tabFragment

Fragment fragment = mPagerAdapter.getItem(position);

它造成的错误时内存不足。 这一个尝试

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


文章来源: Viewpager loose fragment connection on low memory kill