java - fragment 上的 fragment 中的 getArgs() 为 null

标签 java android android-fragments

我希望在滑动选项卡 fragment 上有一个信息 fragment ,并且能够在创建信息 fragment 时将一些参数传递给信息 fragment 。我已将(希望全部)相关代码放在下面:

InfoFragment.java:

public class InfoFragment extends Fragment
{
    private static final String HEADER_ARG = "HEADER";
    private String header;

    /**
     * Use this factory method to create a new instance of this fragment using the provided parameters.
     */
    public static InfoFragment newInstance(String header)
    {
        InfoFragment fragment = new InfoFragment ();
        Bundle args = new Bundle();
        args.putString(HEADER_ARG, header);
        fragment.setArguments(args);
        return fragment;
    }

    /**
     * Required empty public constructor
     */
    public InfoFragment() {}

    /**
     * Gets the args out of the bundle
     */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        if (getArguments() != null)
        {
            this.header = getArguments().getString(HEADER_ARG);
        }
        else
        {
            Log.e("Frag", "Args = null");
        }
    }

    // Rest of Fragment...
}

TabFragment.java:

public class TabFragment extends Fragment
{
    /**
     * Mandatory empty constructor for the fragment manager to instantiate the fragment (e.g. upon screen orientation changes).
     */
    public TabFragment() {}

    /**
     * Create the Inventories tab view
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.tab_2, container, false);
        return view;
    }

    /**
     * Dynamically add fragments
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);

        InfoFragment infoFrag = InfoFragment.newInstance("MyHeader");
        FragmentManager fm = getChildFragmentManager();
        fm.beginTransaction().add(R.id.info_fragment, infoFrag);
    }

    // Rest of TabFragment...
}

tab_fragment.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/character_item_fragment_1"
        android:name="lomax.mycharacter3.InfoFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

控制台日志显示 getArgs() = null,我不知道为什么。有什么想法吗?

最佳答案

因为您使用的是 fragment 标记,所以您的 fragment 将使用空构造函数实例化,而且您忘记在事务结束时调用提交,这就是为什么您没有收到有关缺少 id 的 View 的异常。

修复版本: tab_fragment.xml:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/info_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

代码:

InfoFragment infoFrag = InfoFragment.newInstance("MyHeader");
        FragmentManager fm = getChildFragmentManager();
        fm.beginTransaction().add(R.id.info_fragment, infoFrag).commit();

关于java - fragment 上的 fragment 中的 getArgs() 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612434/

相关文章:

android - 我可以为数据库操作设置优先级吗?

android - 实现一些功能,比如在 Instagram android 应用程序中

android - fragment 显示正在重置

java - 将 SQLite 数据库备份到外部存储 - 文件引用错误

java - RDD 到 CSV JAVA

java - 没有底层框架的java服务器在哪里托管?

android - 提交已经调用的错误,同时更改 fragment

java - 如何从 Java 中的无符号字节中获取 float ?

Android ActionBar 和 Tabs 问题

android - 设置一个按钮作为后退按钮