Liste im Listenfragment bei Orientierungsänderung beibehalten

Ich habe eine app durch die Verwendung von Fragmenten, die alle enthalten in einer einzelnen Aktivität. Die Aktivität beginnt mit einem fragment enthält ein Menü von Schaltflächen, die alle dazu führen, verschiedene listfragments zu ersetzen die ursprüngliche Taste/Menü-fragment.

Mein problem ist, dass nach einer Ausrichtung zu ändern, wenn die Aktivität ist die Anzeige des listviews, es geht Weg, und der Taste Menü zurück. Ich verstehe, warum dies geschieht... die Aktivität wird zerstört und neu erstellt, aber nicht, wie das zu umgehen und pflegen der Liste Ansicht/aktuelle fragment durch die änderung der Ausrichtung.

Habe ich gefunden setRetainInstance und das Beispiel verwenden hieraber ich kann nicht herausfinden, wie man es anwenden, um meine situation mit der Taste menu oder die Möglichkeit, dass das fragment will ich behalten, könnte eine von mehreren verschiedenen.

Unten ist der code, vereinfacht zu zeigen, die wichtigsten Aktivität und eines der listfragments.

Irgendwelche Hinweise, in was hinzufügen, wo es so machen, dass die Liste fragment wird beibehalten würde sehr geschätzt werden.

Aktivität

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);        
    }
}

InformationsquelleAutor der Frage Barak | 2012-05-05

Schreibe einen Kommentar