片段getArguments()返回null

时间:2013-02-20 01:30:55

标签: android android-fragments

我有一个Fragment,其根布局有TabHost,如下所示......

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <FrameLayout
                android:id="@+id/tab_1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" />

            <!-- More FrameLayouts here - each are placeholders for Fragments -->    

        </FrameLayout>
    </LinearLayout>
</TabHost>

为标签内容创建/更新每个Fragment的代码如下......

private void updateTab(String tabId, int placeholder) {
    FragmentManager fm = getFragmentManager();
    if (fm.findFragmentByTag(tabId) == null) {
        Bundle arguments = new Bundle();
        arguments.putInt("current_day", mCurrentTab);
        EpgEventListFragment fragment = new EpgEventListFragment();
        fragment.setArguments(arguments);

        fm.beginTransaction()
                .replace(placeholder, new EpgEventListFragment(), tabId)
                .commit();
    }
}

onCreate(...)的{​​{1}}方法中,我尝试获取参数EpgEventListFragment,但我总是Bundle执行以下操作...

null

我在这里缺少什么?我还在@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle arguments = getArguments(); if (arguments == null) Toast.makeText(getActivity(), "Arguments is NULL", Toast.LENGTH_LONG).show(); else mCurrentDay = getArguments().getInt("current_day", 0); ... } 中尝试getArguments(),但我仍然无效。我刚接触onAttach(...),所以我希望有一个简单的原因,但我在搜索时没有想出任何东西。

1 个答案:

答案 0 :(得分:53)

我认为这与你的问题有关:

fm.beginTransaction()
    .replace(placeholder, new EpgEventListFragment(), tabId)
    .commit();

你正在创建一个新的Fragment(由于它已被新实例化,因此没有参数。)

而是尝试

Fragment fragment = new EpgEventListFragment();
fragment.setArguments(arguments);
fm.beginTransaction()
    .replace(placeholder, fragment, tabId)
    .commit();