我有一个带有 4 个标签的 FragmentTabHost。一个选项卡的内容是在该onViewCreated
方法中动态创建的。这是一个表,添加到该表的行数取决于用户设置。
我的问题是,当我(出于测试目的)向表格添加 3 行、切换选项卡并切换回来时,表格中有 6 行。如果我再做一次,我的表中有 9 行。
因此,每次我打开此选项卡时,都会将 3 行添加到表中,而不会删除以前的内容。
如果我做对了,FragmentTabHost 会存储每个 Tabs 片段的状态。所以我在添加行之前检查方法的是否为空savedInstanceState
。onViewCreated
不幸的是savedInstanceState
,总是返回 null。
这是我的 FragmentTabHost 的初始化代码
private void initTabs()
{
FragmentTabHost tabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(),R.id.realtabcontent);
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1"), TestFragment1.class, null);
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2"), TestFragment2.class, null);
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3"), TestFragment3.class, null);
tabHost.addTab(tabHost.newTabSpec("tab4").setIndicator("tab4"), TestFragment4.class, null);
tabHost.setOnTabChangedListener(this);
}
这是选项卡之一的“tableView”片段的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
return inflater.inflate(R.layout.tab_tableview, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
Log.d("savedInstanceState", String.valueOf(savedInstanceState)); // is always null
if (savedInstanceState != null)
return;
// Add Test-Rows
for (int i=0; i<3; i++)
{
RowFragment fragment = new RowFragment();
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.add(R.id.RowFragmentLayoutContainer, fragment);
ft.commit();
}
}
我的代码有什么问题?我必须怎么做才能只添加一次行?