zoukankan      html  css  js  c++  java
  • 关于FragmentManager findFragmentById 返回nul

    先看Fragment的两种生成方式

    一.用xml标签生成

    在fragment的宿主activity中添加xml标签

    1     <fragment
    2         android:id="@+id/fragment_newsContent"
    3         android:name="com.firstcode.section4_news.NewsContentFragment"
    4         android:layout_width="match_parent"
    5         android:layout_height="match_parent"/>

    name为你创建的fragment类

    这种方法在activity创建时fragment已经生成了

    在Activity中获取fragment实例的操作:

    1         NewsContentFragment fragment = (NewsContentFragment) getFragmentManager().findFragmentById(R.id.fragment_newsContent);

    二、用java代码动态生成

    在fragment的宿主activity的视图文件中添加FrameLayout进行占位

    1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2     android:id="@+id/fragmentContainer"/>

    在Activity中生成fragment的操作

    1 FragmentManager fm = getFragmentManager();
    2 fm.beginTransaction()
    3    .add(R.id.fragmentContainer,“你创建的fragment类实例”)
    .commit();

    问题分析:

    我在使用用FragmentManager.findFragmentById 返回nul的问题就在这,我是通过第二种方式来生成fragment的,也就是说在findFragmentById的实参

    我填的是FrameLayout的Id,而非fragment的Id 所以会返回null

    解决方案:

      1.如果是静态生成fragment,获取fragment实例用getFragmentManager().findFragmentById

      2.如果是java代码动态生成fragment,获取fragment实例直接new 一个就好了 没必要用getFragmentManager().findFragmentById

      3.注意xml文件中的标签FrameLayout与fragment

    还有个问题,我也是这样解决的 在fragment视图里给textview添加文字

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

    原因是通过java代码生成的fragment add里的Id参数填的是fragment的id 所以fragment的视图没有生成

    理解两种fragment生成方式最好的文档莫过于google官方的Android Training下面是中文翻译

    使用xml标签添加fragment

    使用java代码动态添加fragment

  • 相关阅读:
    owlCarousel 用法心得1 -20170405
    js数组去重的四种方法
    js获取url参数值
    jq index()
    jQuery(expression,[context])
    音乐播放器的实现+显示当前时间的歌词(只显示当前时间的文本)
    iOS自动布局框架-Masonry详解
    ios -完全实现代码设置 Could not find a storyboard named 'Main' in bundle NSBundle
    Python使用MySQL数据库的
    iOS 阿里百川SDK集成注意点
  • 原文地址:https://www.cnblogs.com/morningsky/p/4750607.html
Copyright © 2011-2022 走看看