Android中Fragment的生命周期

Android中Fragment的生命周期,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我问了一个关于片段初始化的问题,并发布了我的代码()。问题解决了。但我的问题仍然存在。当我调用onLoad()获取变量时,它抛出NullPointerException。我在onCreateView()中初始化这些变量。所以我想生命周期已经结束了。我在A.java中的以下函数中记录了信息:onDestroy,onDestroyView,onStop。当片段A更改为另一个片段时,onDestroyView和onStop被调用,而onDestroy不被调用。奇怪: 片段a中有一个EditText。我

我问了一个关于片段初始化的问题,并发布了我的代码()。问题解决了。但我的问题仍然存在。当我调用
onLoad()
获取变量时,它抛出
NullPointerException
。我在
onCreateView()
中初始化这些变量。所以我想生命周期已经结束了。我在A.java中的以下函数中记录了信息:
onDestroy
onDestroyView
onStop
。当片段A更改为另一个片段时,
onDestroyView
onStop
被调用,而
onDestroy
不被调用。奇怪:

片段a中有一个EditText。我输入一个字符串
abc
。1、 如果生命周期结束,那么当我将片段从一个更改为另一个,然后再更改回一个时,输入应该是空的。但事实并非如此。2、 如果生命周期没有结束,为什么我不能得到变量

那么,有什么东西可以保存abc
abc
吗?是什么?在哪里

看来我不能在片段中延迟初始化。我不能得到非静态变量

Code:
/** super class of Fragment */
public class BaseFragment extends Fragment {
    public void onLoad(Context context){
    }
}

/** */
public class AFragment extends BaseFragment{
    TextView name;
    @Override
    public View onCreateVew(...){
        name = new TextView(..);
    }
    @Override
    public void onLoad(Context context){
         // here will throw NullPointerException
         name.setText("=========");
    }
}


public class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener,ViewPager.OnPageChangeListener {
    ....
    @Override
    public Fragment getItem(int position) {
        TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.mClss.getName(), info.mArgs);
    }

    @Override
    public void onPageSelected(int position) {
        TabWidget widget = mTabHost.getTabWidget();
        int oldFocusability = widget.getDescendantFocusability();
        widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
        mTabHost.setCurrentTab(position);

        widget.setDescendantFocusability(oldFocusability);

        BaseFragment f = (BaseFragment) getItem(position);
        f.onLoad(mContext);
    }
}
但我的问题仍然存在。当我调用onLoad()以获取 变量,它抛出NullPointerException。我初始化这些 onCreateView()中的变量


问题在于处理这些碎片的方式。更确切地说,在
onPageSelected
方法中,您可以调用
FragmentPagerAdapter
getItem()
方法来查找该位置的片段(或者我认为您正在尝试这样做)。但是调用此方法只是实例化一个新片段,每次调用它时,它都不会为该位置提供对
ViewPager
片段的引用。这个新实例化的片段没有附加到
活动
,它的
onCreateView
方法没有被调用,因此它没有创建任何视图。试图使用
onLoad
方法访问其中一个视图是错误的,它将抛出
NullPointerException
。您应该尝试使用上一个答案中的我的代码,因为该代码将尝试查找
ViewPager
实例化的片段,并通过
FragmentManager

将其用作其页面。您可以将堆栈跟踪发布到获取
NullPointerException
以及代码的位置吗?@antew done!你可以检查它,我也有“消失”变量的问题,甚至getactivity()也返回null。但我不会为viewPager中的每个选项卡多次调用getItem,因为这会替换Luksprog正确指出的片段实例。因此,问题是:为什么片段实例仍然失去了它的variabel集,因为似乎有一个新的片段实例“接管”了选项卡?是viewPager/FragmentPagerAdapter的内部原因吗?很抱歉,我今天早些时候在getActivty上提出的问题返回null,并且可能会出现相同的综合征,可以在这里找到: