Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 低内存终止时的Viewpager松散片段连接_Java_Android_Android Viewpager_Fragment_Low Memory - Fatal编程技术网

Java 低内存终止时的Viewpager松散片段连接

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

在我的活动中,我使用viewpager。我创建了两个片段,并将附加到查看页面,并在活动中不时从这些片段调用一些方法。。当应用程序在内存不足的情况下被终止并重新创建片段后,将存在与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;
            }
        }
。 .


我找到了解决办法

这真的就像一位专家所说的,我在主活动中的片段变量被清除了,所以我不再与片段有任何联系。。我所做的是在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);