フラグメントを使用するアプリがあり、そのすべてが1つのアクティビティに含まれています。アクティビティは、ボタンのメニューを含むフラグメントで始まります。これらすべてにより、さまざまなリストフラグメントが元のボタン/メニューフラグメントを置き換えます。
私の問題は、向きを変更すると、アクティビティがリストビューの1つを表示している場合、それが消えてボタンメニューに戻ることです。なぜこれが起こっているのか理解しています...アクティビティが破棄されて再作成されますが、それを回避し、向きの変更を通じてリストビュー/現在のフラグメントを維持する方法はわかりません。
ここsetRetainInstance
で使用例を見つけましたが、ボタンメニューを使用して自分の状況に適用する方法や、保持したいフラグメントがいくつかの異なるフラグメントの1つである可能性を理解できません。
以下は、メインアクティビティとリストフラグメントの1つを示すために簡略化されたコードです。
リストフラグメントが保持されるように、どこに追加するかについてのポインタをいただければ幸いです。
アクティビティ
public class Main extends FragmentActivity {
private MainMenuFragment menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
menu = new MainMenuFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.pane, menu).commit();
}
}
ListFragment
public class ItemListFragment extends ListFragment {
private TextView header;
private TextView empty;
private Button add;
public static Cursor itemCursor;
private GroceryDB mDbHelper;
public static long mRowId;
public static CheckCursorAdapter lists;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.common_list, container, false);
header = (TextView) v.findViewById(R.id.header);
empty = (TextView) v.findViewById(android.R.id.empty);
header.setText(R.string.header_item);
empty.setText(R.string.empty_items);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mRowId=0;
mDbHelper = new GroceryDB(getActivity());
mDbHelper.open();
itemCursor = mDbHelper.fetchAllItems();
getActivity().startManagingCursor(itemCursor);
String[] from = new String[] { GroceryDB.ITEM_NAME };
int[] to = new int[] { R.id.ListItem };
lists = new CheckCursorAdapter(getActivity(),
R.layout.listlayout_itemlist, itemCursor, from, to);
setListAdapter(lists);
}
}