Java 低内存终止时的Viewpager松散片段连接
在我的活动中,我使用viewpager。我创建了两个片段,并将附加到查看页面,并在活动中不时从这些片段调用一些方法。。当应用程序在内存不足的情况下被终止并重新创建片段后,将存在与viewpager somehome的连接。。我无法调用MyFragment.mymethod()。。它说MyFragment是空的Java 低内存终止时的Viewpager松散片段连接,java,android,android-viewpager,fragment,low-memory,Java,Android,Android Viewpager,Fragment,Low Memory,在我的活动中,我使用viewpager。我创建了两个片段,并将附加到查看页面,并在活动中不时从这些片段调用一些方法。。当应用程序在内存不足的情况下被终止并重新创建片段后,将存在与viewpager somehome的连接。。我无法调用MyFragment.mymethod()。。它说MyFragment是空的 public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPage
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;
}
}
。
.
我找到了解决办法 这真的就像一位专家所说的,我在主活动中的片段变量被清除了,所以我不再与片段有任何联系。。我所做的是在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;
}
如果您通过此代码获得tabFragment
Fragment fragment = mPagerAdapter.getItem(position);
当内存不足时,它会导致该错误。
试试这个
fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":"+position);
为了确保我理解-当你说应用程序被终止然后重新创建时,你的意思是应用程序完全终止,然后重新启动应用程序,ViewPager和片段之间没有连接?没有,我的意思是,当你打开应用程序,然后返回主屏幕,并做其他事情,如使用其他应用程序等,应用程序会在内存不足时被android杀死,然后你在android上打开任务列表,再次单击应用程序。它将使用其片段再次创建活动。。。但是重新创建的片段与activityok的viewpager没有连接。。那么现在,当你按下后退按钮自己终止应用程序的主要活动,然后稍后重新启动时,会发生什么呢?当我自己终止应用程序时,一切正常。。。一切都按预期进行您是否仅在onCreate()方法中有ViewPager?我认为这个应用程序并没有被杀死,只调用了onStop()。因此,当您重新启动应用程序时,它会调用onRestart(),但不会调用onCreate(),并且由于某些原因,此实例不会持久化(我不知道为什么),但您是否可以让我知道当您将ViewPager放在onRestart()中时会发生什么情况?另外,你怎么说Android已经终止了应用程序?日志是否表明调用了onDestroy()?在这种情况下,还要重写onDestroy()以包含此.finish()以确保其终止。
fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":"+position);