powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Дайте совет по работе с фрагментами
5 сообщений из 5, страница 1 из 1
Дайте совет по работе с фрагментами
    #38934700
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю небольшое приложение, прикрутил выезжающее меню типа Navigation Drawer.
Каждый пункт - это класс-наследник от Fragment.
Сижу играюсь: пытаюсь вынести "долгую" загрузку данных для этого фрагмента в фон, а на это время вывести на экран некую анимацию, навскидку получилось все, что хотел, но хотелось бы, что бы знающие люди посмотрели и в случае чего подсказали, где-что не так, был бы благодарен.

Код: 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.
public class News
        extends Fragment {

    private View v;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.news, container, false);
        return v;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setRetainInstance(true);
        new MyBackgroundTask().execute();
    }

    class MyBackgroundTask
            extends AsyncTask<Void, Void, Void> {

        ProgressDialog pd = new ProgressDialog(getActivity());

        MyBackgroundTask() {
            pd.show();
            pd.setCancelable(false);
            pd.setCanceledOnTouchOutside(false);
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            ((TextView) v.findViewById(R.id.TEST)).setText("DONE");
            pd.hide();
        }

    }

}
...
Рейтинг: 0 / 0
Дайте совет по работе с фрагментами
    #38934741
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в таком случае просто показываю прогресс (двигающимся кружком) в середине активности/фрагмента. То есть сначала всё скрыто, кроме прогресса, затем прогресс скрывается и все контролы показываются.

Андроид сам отвечает за отображение анимации прогресса.
...
Рейтинг: 0 / 0
Дайте совет по работе с фрагментами
    #38934762
Dim666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korshun,

Наверно создание и показ диалога лучше вынести в @Override onPreExexute таска? А то вдруг вы для объекта класса MyBackgroundTask execute() не сделаете...

Попробуйте кстати в течение этих 3-х секунд экран повернуть :-)
...
Рейтинг: 0 / 0
Дайте совет по работе с фрагментами
    #38934811
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЯ в таком случае просто показываю прогресс (двигающимся кружком) в середине активности/фрагмента. То есть сначала всё скрыто, кроме прогресса, затем прогресс скрывается и все контролы показываются.

Андроид сам отвечает за отображение анимации прогресса.

То-есть в целом криминала никакого нет ?

Dim666korshun,

Наверно создание и показ диалога лучше вынести в @Override onPreExexute таска? А то вдруг вы для объекта класса MyBackgroundTask execute() не сделаете...

Попробуйте кстати в течение этих 3-х секунд экран повернуть :-)
Хм, а почему при повороте заново вызывается onCreateView, я поставил же setRetainInstance(true);
Или я доки как-то не так прочитал ? http://developer.android.com/intl/ru/reference/android/app/Fragment.html#setRetainInstance(boolean)
...
Рейтинг: 0 / 0
Дайте совет по работе с фрагментами
    #38934908
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доки действительно как-то криво прочитал.

Родил вот такое решение, надеюсь на ваши комментарии.

Код: 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.
public class News
        extends Fragment {

    private View v;
    private ListView newsListView;
    private SimpleAdapter sAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
        new MyBackgroundTask().execute();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.news, container, false);
        newsListView = (ListView) v.findViewById(R.id.news_listview);
        return v;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
            applyResult();
        }
    }



    private void applyResult() {
        newsListView.setAdapter(sAdapter);
    }


    class MyBackgroundTask
            extends AsyncTask<Void, Void, Void> {

        ProgressDialog pd = new ProgressDialog(getActivity());

        MyBackgroundTask() {
            pd.show();
            pd.setCancelable(false);
            pd.setCanceledOnTouchOutside(false);
        }

        @Override
        protected void onPreExecute() {

        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            List<Map<String, String>> data = new ArrayList<>(15);
            Map<String, String> m;
            for (int i = 0; i < 15; i++) {
                m = new HashMap<>();
                m.put("item_date", "00.00.0000");
                m.put("item_title", "Заголовок новости.");
                data.add(m);
            }

            String[] from = { "item_date", "item_title" };
            int[] to = { R.id.news_item_date, R.id.news_item_title };
            sAdapter = new SimpleAdapter(getActivity(), data, R.layout.news_item, from, to);
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            applyResult();
            pd.hide();
        }

    }

}
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Дайте совет по работе с фрагментами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]