2014-02-20 2 views
1

в моей деятельности я использую viewpager. Я создаю два фрагмента и присоединяю к пейджеру представления и время от времени вызываю некоторые методы из этих фрагментов в своей деятельности. Afer приложение убито на низкой памяти, а воссозданные фрагменты есть, но нет связи с 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 и снова нажимаете на приложение , Он снова создает активность с его фрагментами ... но воссозданные фрагменты не имеют никакого отношения к viewpager активности – laymelek

+0

ok .. так что теперь, когда вы убиваете основное действие приложения самостоятельно, нажав кнопку «Назад», а затем перезапустите его позже ? – 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

Если вы получаете tabFragment этого кода

Fragment fragment = mPagerAdapter.getItem(position); 

Это вызвало ошибку при низкой памяти. Попробуйте с этим одним

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