Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как правильно использовать AsyncTaskLoader в дочернем фрагменте ViewPager-а? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Запросы между сайтом и приложением http://www.cyberforum.ru/android-dev/thread1704805.html
Добрый день, я хочу сделать систему чата. Какую посоветуете библиотеке для работы между сайта и приложением. Чтобы к примеру когда я в приложение к текст поле писал "сообщение" чтобы он при...
Программирование Android Searchview в toolbar Доброго времени суток уважаемые форумчане. Нужна Ваша помощь в реализации поиска. Есть несколько фрагментов, и searchview в toolbar-е как осуществить поиск для каждого фрагмента через этот... http://www.cyberforum.ru/android-dev/thread1704696.html
Нужен пример работы Socked клиента, который получает некую инфу от сервера Программирование Android
Может кто скинуть пример работы Socked клиента, который получает некую инфу от сервера? Я хочу сделать мониторинг игрового сервера с помощью Steam Query.
Программирование Android Анимация ImageView
Как реализовать следующее. Например, пока держат долгое нажатие на ImageView запускается анимированние с увеличением размера, при потере нажатия вернуть в исходное состояние.
Программирование Android Подскажите по GCM http://www.cyberforum.ru/android-dev/thread1704543.html
Ранее с push сообщениями от гугла дел не имел. Открыл их турториал - вроде все ок. Вознилка заминка с canonical_ids: пытаюсь воспроизвести ситуацию, когда сервер gcm присылает новый идентификатор...
Программирование Android YandexMapKit vs Yandex Сорри, в тему забыл добавить Yandex Maps JS API WebView. Итак, парни, решил я залезть в одну и ту же реку дважды. Потребовалось выбрать движок для карт. Google maps не подошли по причине не очень... подробнее

Показать сообщение отдельно
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598

Как правильно использовать AsyncTaskLoader в дочернем фрагменте ViewPager-а? - Программирование Android

06.04.2016, 18:51. Просмотров 179. Ответов 0
Метки (Все метки)

Всем доброго времени суток! Собственно проблема в названии темы. Есть код фрагмента:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
public class DayFragment extends Fragment
        implements LoaderManager.LoaderCallbacks<DayAdapter.DayItem[]> {
 
    private static final int CONTENT_LOADER = 0;
 
    private DayAdapter mAdapter = null;
    private int mWeekNumber = 1;
    private int mDayCode = 1;
    private Table.Timetable mTimetable;
    private RecyclerView mRVContent;
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final MainActivity mainActivity = (MainActivity) getActivity();
        View v = inflater.inflate(R.layout.content, container, false);
        mRVContent = (RecyclerView) v.findViewById(R.id.rvContent);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(mainActivity);
        mRVContent.setLayoutManager(layoutManager);
        mAdapter = new DayAdapter(getActivity());
        mRVContent.setAdapter(mAdapter);
        //Initialize the cursor loader
        getLoaderManager().initLoader(CONTENT_LOADER, null, this).forceLoad();
        return v;
    }
 
    @Override
    public Loader<DayAdapter.DayItem[]> onCreateLoader(final int id, Bundle args) {
 
        if(CONTENT_LOADER == id) {
            return new ContentLoader(getContext(), mWeekNumber, mDayCode, mTimetable);
        }
 
        return null;
    }
 
    @Override
    public void onLoadFinished(Loader loader, DayAdapter.DayItem[] items) {
 
        if(CONTENT_LOADER == loader.getId()) {
            mAdapter.setIs24HourFormat(SettingsManager.is24HourFormat(getContext()));
            mAdapter.clear();
 
            for (DayAdapter.DayItem item : items) {
                mAdapter.add(item);
            }
 
            mAdapter.notifyDataSetChanged();
 
            if (items.length == 0) {
                mRVContent.setBackgroundResource(R.drawable.bg_lesson_empty);
            } else {
                mRVContent.setBackgroundColor(0xFFFFFFFF);
            }
        }
    }
 
    @Override
    public void onLoaderReset(Loader loader) {
 
    }
 
    private static final class ContentLoader extends AsyncTaskLoader<DayAdapter.DayItem[]> {
        private final int mWeekNumber;
        private final int mDayCode;
        private final Table.Timetable mTimetable;
 
        public ContentLoader(Context context, final int weekNumber, final int dayCode,
                             Table.Timetable timetable) {
            super(context);
            mWeekNumber = weekNumber;
            mDayCode = dayCode;
            mTimetable = timetable;
        }
 
        @Override
        public DayAdapter.DayItem[] loadInBackground() {
            DatabaseHandler db = new DatabaseHandler(getContext());
            db.openReadable();
            List<Table.Lesson> lessons = db.findLessons(mDayCode, mWeekNumber, mTimetable.getId());
            DayAdapter.DayItem[] items = new DayAdapter.DayItem[lessons.size()];
 
            for (int i = 0; i < items.length; ++i) {
                Table.Lesson lesson = lessons.get(i);
 
                Table.Subject subject = db.getSubject(lesson.getSubjectId());
                Table.Teacher teacher = db.getTeacher(lesson.getTeacherId());
 
                if (teacher == null) {
                    teacher = new Table.Teacher(""); //Empty name
                }
 
                items[i] = new DayAdapter.DayItem()
                        .setId(lesson.getId())
                        .setTitle(subject.getTitle())
                        .setSubtitle(teacher.getName()));
            }
 
            db.close();
 
            return items;
        }
    }
}

Но onLoadFinished метод не вызывается. Я проверил вывод в лог... LoaderManager вызывает onCreateLoader, но никогда не вызывает onLoadFinished только самый первый раз, когда запускаешь приложение и показывается первая страница (и только для этой первой страницы). На этом все! Дальше, если проскролить к следующим страницам и вернуться назад, чтобы пересоздался View, то LoaderManager не вызовет onLoadFinished уже и для первой страницы. При этом методы onCreateLoader и onLoaderReset вызываются как положено. Это такая шутка от Google?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru