我有一個應用程序使用片段,所有這些都包含在單個活動中。該活動以包含按鈕菜單的片段開始,所有這些都會導致各種列表片段替換原始按鈕/菜單片段。在方向變化的列表片段中保留列表
我的問題是,在方向改變時,如果活動顯示其中一個列表視圖,它將消失,並返回按鈕菜單。我明白爲什麼會發生這種情況......活動被破壞並重新創建,而不是如何解決它並通過方向更改來維護列表視圖/當前片段。
我發現setRetainInstance
和使用here的例子,但我無法弄清楚如何將其應用到我的按鈕菜單或可能性的情況,我想保留片段可能有幾個不同的一個那些。
下面是簡化代碼以顯示主要活動和一個listfragments。
什麼指示什麼添加到哪裏使其保留列表片段將不勝感激。
活動
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);
}
}
那麼,這是令人難以置信的尷尬(更不用說愚蠢的我)。我**知道我應該檢查savedInstanceState(),但由於某種原因,我沒有這樣做,甚至從來沒有想過它。感謝您的快速回復。 – Barak