Фрагменты onCreate после того, как процесс приложения был убит

У меня есть приложение, которое в основном представляет собой средство запуска с основным действием и просмотром фрагментов пейджера, и я только что заметил, что если я запускаю приложение из своего приложения, и мое приложение уничтожается, когда я каким-то образом возвращаюсь, функция создания фрагмента вызывается первой, что моя функция создания основной деятельности.

Это в конечном итоге приводит к сбою моего приложения, потому что я сначала получаю список всех приложений, использующих основное действие, а затем каждый фрагмент представления пейджера получает дополнительный список из основного списка. Приложение работает нормально при первом запуске, потому что андроид сначала запускает создание основного действия, а затем создание фрагментов.

Итак, как я могу решить эту проблему? есть ли способ сначала вызвать функцию onCreate Main Activity? или есть лучший способ сделать это?

Приложение выдает исключение недопустимого аргумента, когда я пытаюсь создать более короткий список, и, поскольку основной список заполняется только основным действием, когда я возвращаюсь в свое приложение, основной список пуст, что дает мне исключение

Код:

`

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.grid, null);

        GridView gridview = (GridView) view.findViewById(R.id.gridview);

        int starterPosition;

        starterPosition = 16 * position;
        int enderPosition = starterPosition + 16;

        if (enderPosition > appsList.size()) {
            enderPosition = appsList.size();
        }


        ArrayList<App> shorterList = new ArrayList<App>(appsList.subList(
                starterPosition, enderPosition));

        final AppLauncherAdapter grid = new AppLauncherAdapter(ctx, shorterList);

        gridview.setAdapter(grid);

        gridview.setSelector(R.color.trans);


        return gridview;
    }

`


person Steve    schedule 03.09.2012    source источник


Ответы (1)


Существует метод под названием onActivityCreated, который вы должны использовать специально для этой цели. onActivityCreated всегда будет вызываться после метода onCreate Activity.

person Alex Lockwood    schedule 03.09.2012
comment
Итак, я должен использовать onActivityCreated в своей основной деятельности и вызывать обработку фрагментов этой функции? Это позволит избежать того, что onCreate из фрагментов будет вызываться первым? - person Steve; 03.09.2012
comment
Ваш Fragment, вероятно, не должен слишком много взаимодействовать с Activity, но если да, то вам следует делать это в onActivityCreated или после него. - person Alex Lockwood; 03.09.2012
comment
Боюсь, я не понимаю, что вы видите, что весь код, который необходимо обработать, - это функция onCreateView, и я думаю, что не могу переместить ее оттуда, так как я могу использовать onActivityCreated? Извините за нуб, но я уже потерялся - person Steve; 03.09.2012
comment
Можете ли вы опубликовать свой код? Я не понимаю, какая часть вызывает у вас затруднения. Вы пытаетесь получить доступ к представлениям Activitys из Fragment? Потому что, как правило, вы не хотите этого делать... ваши Fragment должны иметь свой собственный пользовательский интерфейс/макет, чтобы их можно было использовать без в зависимости от базовой активности. - person Alex Lockwood; 03.09.2012
comment
Это строка, которая вызывает у меня проблемы `ArrayList‹App› shortList = new ArrayList‹App›(appsList.subList(starterPosition, enderPosition)); ` Это дает мне недопустимый аргумент, потому что, когда я возвращаюсь обратно в свое приложение, основной список пуст, и этот основной список заполняется основным действием, а затем передается моему адаптеру pageViewer, где находятся фрагменты - person Steve; 03.09.2012
comment
Я не знаю, что означают App, appList, subList, starterPosition или enderPosition, лол... вы должны опубликовать свой код, чтобы я мог лучше понять контекст. - person Alex Lockwood; 03.09.2012
comment
Я до сих пор не понимаю, что такое appsList, но вы должны возвращать view из onCreateView... не gridview. - person Alex Lockwood; 03.09.2012
comment
appsList — это список всех установленных приложений в Android, каждый объект приложения содержит значок имени и намерение, необходимое для запуска приложения. Проблема в том, что я заполняю этот список основной активностью, но поскольку, когда я возвращаюсь к моему приложению, которое уничтожается из-за нехватки памяти, сначала вызывается onCreate фрагмента, но примерно в это время основной список пуст!!! В нем 0 объектов, потому что он еще не был заполнен основной деятельностью. - person Steve; 03.09.2012
comment
Опять же, исключение возникает только тогда, когда приложение уничтожается, и я возвращаюсь к своему приложению, когда оно запускается в первый раз, все в порядке, так как основное действие запускается первым, и основной список заполняется - person Steve; 03.09.2012
comment
Похоже, лучшим решением будет загрузка приложений Fragment вместо Fragment... есть ли причина, по которой вы этого не делаете? Это рекомендуемый подход, особенно с LoaderManager. - person Alex Lockwood; 03.09.2012
comment
Ну, я думал об этом, да, но, поскольку фрагментов может быть от 1 до 10 или более, поскольку это действительно зависит от количества просмотренных страниц, мне нужно, как мне предотвратить повторное обновление всех установленных приложений? - person Steve; 03.09.2012
comment
Только что нашел способ переместить выборку списка приложений для просмотра пейджера, и это работает! спасибо :) я добавляю ваш ответ как принятый - person Steve; 09.09.2012