Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Дайте совет по работе с фрагментами / 5 сообщений из 5, страница 1 из 1
13.04.2015, 12:31
    #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
13.04.2015, 12:49
    #38934741
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дайте совет по работе с фрагментами
Я в таком случае просто показываю прогресс (двигающимся кружком) в середине активности/фрагмента. То есть сначала всё скрыто, кроме прогресса, затем прогресс скрывается и все контролы показываются.

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

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

Попробуйте кстати в течение этих 3-х секунд экран повернуть :-)
...
Рейтинг: 0 / 0
13.04.2015, 13:23
    #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
13.04.2015, 14:23
    #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
Форумы / Android [игнор отключен] [закрыт для гостей] / Дайте совет по работе с фрагментами / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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