2 つのタブを切り替える必要がある Android アプリケーションがあります。フラグメントを使用しています。問題は、あるタブの editText ボックスに何かを入力して別のタブに切り替えると、元のタブがデフォルト値にリセットされることです。
さまざまなフォーラムで見つけた回答に基づいて、状態を保存しています:
@Override
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
// When the given tab is selected, show the tab contents in the
// container view.
Fragment fragment = new TabsSectionFragment();
//fragment.setRetainInstance(true);
Bundle args = new Bundle();
args.putInt(TabsSectionFragment.ARG_SECTION_NUMBER,
tab.getPosition() + 1);
fragment.setArguments(args);
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment).commit();
}
@Override
public void onTabUnselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
onCreateView で、いくつかのレイアウトを読み込んでいます。
public static class TabsSectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = "section_number";
public TabsSectionFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int selectedSection = getArguments().getInt(ARG_SECTION_NUMBER);
switch (selectedSection)
{
case 1:
// load the input layout XML
LayoutInflater factory1 = LayoutInflater.from(getActivity());
View myView1 = factory1.inflate(R.layout.tab1, null);
return myView1;
case 2:
// load the summary layout XML
LayoutInflater factory2 = LayoutInflater.from(getActivity());
View myView2 = factory2.inflate(R.layout.tab2, null);
return myView2;
default:
// Create a new TextView and set its text to the fragment's section
// number argument value.
TextView textView = new TextView(getActivity());
textView.setGravity(Gravity.CENTER);
textView.setText(Integer.toString(getArguments().getInt(
ARG_SECTION_NUMBER)));
return textView;
}
}
}
タブを切り替える前に入力した情報を失わないように、savedInstanceState を使用してタブの状態を復元するにはどうすればよいですか。
また、状態を保存/リロードする代わりに、フラグメントを非表示にして表示することを推奨する人もいると読みました。より良いオプションは何ですか。
前もって感謝します!!