繁体   English   中英

Android中Fragment的生命周期

[英]The life cycle of Fragment in Android

我问了一个有关Fragment初始化的问题,并发布了我的代码( 在Android中使用Fragment时延迟初始化 )。 问题解决了。 但是我的问题仍然存在。 当我调用onLoad()获取变量时,它抛出NullPointerException 我在onCreateView()初始化这些变量。 所以我想生命周期已经结束。 我在以下功能中将信息记录在A.java中: onDestroyonDestroyViewonStop 当片段A更改为另一个片段时,将调用onDestroyViewonStop ,而不会调用onDestroy 奇怪:

片段A中有一个EditText。我输入了字符串abc 1,如果生命周期结束,那么当我将片段从A更改为另一个然后又更改为A时,输入应为空。 但这不是。 2,如果生命周期还没有结束,为什么我不能得到变量?

那么有什么可以将abc保存到某个地方的吗? 那是啥? 哪里?

看来我无法延迟Fragment中的初始化。 我无法获取非静态变量。

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方法中,您调用FragmentPagerAdaptergetItem()方法来查找该位置的片段(或者这就是我在想的事情)。 但是,每次调用该方法时,只需实例化一个新片段 ,就无法为该位置提供对ViewPager片段的引用。 这个新实例化的片段没有附加到Activity ,它的onCreateView方法没有被调用,所以它没有创建任何视图。 尝试使用onLoad方法访问其中一个视图是错误的,并且将抛出NullPointerException 您应该尝试使用上一个答案中的代码,因为该代码将尝试查找ViewPager实例化的片段,并通过FragmentManager将其用作页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM