2014-02-20 48 views
1

在我的活動中,我使用viewpager。我創建了兩個片段,並附加到視圖尋呼機,並在我的活動中隨時調用這些片段中的某些方法。之後應用程序在低內存中死亡,重新創建的片段在那裏,但沒有與viewpager somehome連接..我可以不叫MyFragment.mymethod()..它說MyFragment爲空Viewpager在低內存殺死的情況下鬆散的碎片連接

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

嘗試只是爲了確保我的理解 - 當你說的應用程序被殺害,然後重新創建,你的意思是,應用程序完全結束,然後在應用程序的一個新的開始,沒有連接ViewPager和碎片之間? – ucsunil

+0

不,我的意思是當你打開應用程序,然後返回到主屏幕,並做其他的東西,如使用其他應用程序等等,這些應用程序在Android的低內存死亡,並比你打開任務列表在Android上,再次點擊應用程序。它用碎片再次創建活動......但是重新創建的碎片與活動的視圖編輯器 – laymelek

+0

沒有任何關係。現在,當您通過按下後退按鈕殺死應用程序的主要活動並稍後重新啓動時會發生什麼情況? – ucsunil

回答

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

如果通過這個代碼

Fragment fragment = mPagerAdapter.getItem(position); 
獲得tabFragment

它在低內存時導致了這個錯誤。 這一個

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