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)