4 つのタブを持つ FragmentTabHost があります。1 つのタブのコンテンツは、メソッド内で動的に作成されますonViewCreated
。これはテーブルであり、このテーブルに追加される行の量はユーザー設定によって異なります。
私の問題は、(テスト目的で)テーブルに3行を追加し、タブを切り替えて元に戻すと、テーブルに6行あることです。もう一度行うと、テーブルに 9 行あります。
したがって、このタブを開くたびに、以前のコンテンツが削除されることなく、3 行がテーブルに追加されます。
うまくいけば、FragmentTabHost は各タブ フラグメントの状態を格納します。したがって、行を追加する前savedInstanceState
に、onViewCreated
メソッドの が null かどうかを確認します。残念ながら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);
}
これは、タブの 1 つの「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();
}
}
コードの何が問題になっていますか? 行を 1 回だけ追加するにはどうすればよいですか?