片段getArguments()返回null

Squ*_*onk 21 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>
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的onCreate(...)方法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);

    ...
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我也尝试过getArguments(),onAttach(...)但我仍然无效.我是新手,Fragments所以我希望有一个简单的原因,但我在搜索时没有想出任何东西.

A--*_*--C 54

我在想这与你的问题有关:

fm.beginTransaction()
    .replace(placeholder, new EpgEventListFragment(), tabId)
    .commit();
Run Code Online (Sandbox Code Playgroud)

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

而是试试

Fragment fragment = new EpgEventListFragment();
fragment.setArguments(arguments);
fm.beginTransaction()
    .replace(placeholder, fragment, tabId)
    .commit();
Run Code Online (Sandbox Code Playgroud)

  • 哦,你一定是在开玩笑...... aaaargh! (10认同)
  • 有时只需另一双眼睛.谢谢!我原本没有传递参数,所以我在调用`replace(...)`时创建了`Fragment`.我接受你的回答有时间延迟,但我会这样做.再次感谢. (2认同)