【发布时间】:2012-05-14 20:49:24
【问题描述】:
我有一个使用片段的应用程序,所有片段都包含在一个活动中。活动以包含按钮菜单的片段开始,所有这些都会导致各种列表片段替换原始按钮/菜单片段。
我的问题是,在方向改变时,如果活动正在显示其中一个列表视图,它会消失并且按钮菜单会返回。我理解为什么会发生这种情况......活动被破坏并重新创建,但不知道如何解决它并通过方向更改来维护列表视图/当前片段。
我找到了setRetainInstance 和使用here 的示例,但我不知道如何将它应用到我的情况与按钮菜单或我想保留的片段可能是一个几个不同的。
下面是简化代码以显示主要活动和列表片段之一。
非常感谢任何关于添加内容的指针,以便保留列表片段。
活动
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();
}
}
列表片段
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);
}
}
【问题讨论】:
标签: android android-listview android-fragments android-orientation