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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 128
#1

AsyncTask в Fragment и viewPager - Программирование Android

04.11.2015, 16:04. Просмотров 421. Ответов 1
Метки нет (Все метки)

У меня есть ViewPager который состоит из двух листающихся экранов,
есть код фрагмента который запускается в этом viewPager (как правильно сказать я не знаю). В разметке этого фрагмента есть ListView. В этот ListView должна появлятся информация загруженная из интернета с помощью AsyncTask . Но информация эта не появляется в ListView и как я понял потому что в методе onCreateView View элемент выводится раньше чем загружаются данные и потом уже они не меняются .. Как можно это исправить ? ..
Код фрагмента
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.wall_call.wallpaperset.fragments;
 
/**
 * Created by Egor on 03.11.2015.
 */
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
 
import android.app.Activity;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
 
import com.wall_call.wallpaperset.Constat;
import com.wall_call.wallpaperset.Mapers.AutoMaper;
import com.wall_call.wallpaperset.R;
import com.wall_call.wallpaperset.adapters.EventListAdapter;
import com.wall_call.wallpaperset.helper.Requester;
import com.wall_call.wallpaperset.models.ListEventModel;
 
public class PageFragment extends Fragment {
 
    static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
    List<ListEventModel> itemsEvents;
    EventListAdapter eventAdapte;
    int pageNumber;
    int backColor;
 
    public static PageFragment newInstance(int page) {
        PageFragment pageFragment = new PageFragment();
        Bundle arguments = new Bundle();
        arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
        pageFragment.setArguments(arguments);
        return pageFragment;
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
        setRetainInstance(true);
        startAsyncTask();
    }
 
    private void startAsyncTask() {
        new ListEventsAsync(this).execute();
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, null);
 
        TextView tvPage = (TextView) view.findViewById(R.id.textWithFragment);
        tvPage.setText("Старинчка " + pageNumber);
        //tvPage.setBackgroundColor(backColor);
 
       // ListView eventList = (ListView) view.findViewById(R.id.list_events);
 
       /* List<ListEventModel> newItemsEvent = new ArrayList<ListEventModel>();
        ListEventModel newModel = new ListEventModel();
        ListEventModel newModel2 = new ListEventModel();
        newModel.setFullName("Egor1");
        newModel2.setFullName("Egor2");
        newItemsEvent.add(newModel);
        newItemsEvent.add(newModel2);
        eventAdapte = new EventListAdapter(getActivity(),newItemsEvent);
        eventList.setAdapter(eventAdapte);*/
 
        //new ListEventsAsync(eventList).execute();
 
        return view;
    }
 
    public class ListEventsAsync extends AsyncTask<Void, Void, List<ListEventModel>> {
        ListView listViewEvent;
        PageFragment fragm;
        ListEventsAsync(PageFragment fr){
            //this.listViewEvent = eventList;
            this.fragm = fr;
        }
        @Override
        protected List<ListEventModel> doInBackground(Void... params) {
            /*sPref = getSharedPreferences("MyAouth",0);
            String userId = sPref.getString("userId", "");
            String userPass = sPref.getString("userPass", "");*/
 
 
            /*ChatService chatService = new ChatService();
            //List<ChatModel> chats = chatService.getAllChats(userId, userPass);
            chatDialogs = chatService.getAllChats(userId, userPass);*/
            Log.d("MYLOG", "start send POST");
            String resultPOST = Requester.sendPost(Constat.URL_MY_PAGE_SEND, "UserId=1"); // Добавить данных потом
            Log.d("MyLog",resultPOST);
            itemsEvents = AutoMaper.itemsEventMaper(resultPOST);
            Log.d("MYLOG", "END send POST");
 
            return itemsEvents;
        }
 
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
 
        }
 
        @Override
        protected void onPostExecute(final List<ListEventModel> result) {
            super.onPostExecute(result);
            eventAdapte = new EventListAdapter(getActivity(),result);
            Log.d("MYLOG", "set ADAPTER");
 
            fragm.setItemsListView(eventAdapte);
        }
    }
 
    private void setItemsListView(EventListAdapter adapterEvent){
        final Activity activity = getActivity();
        ListView listItemP =(ListView) activity.findViewById(R.id.list_events);
        listItemP.setAdapter(adapterEvent);
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2015, 16:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос AsyncTask в Fragment и viewPager (Программирование Android):

ViewPager, Fragment и SimpleCursorAdapter, обновить соседнюю страницу - Программирование Android
Есть активити с ViewPager, в который подгружается фрагмент, состоящий из ListView. ListView (с TextView и CheckBox) заполняется из БД...

Обновление fragment из другого fragment - Программирование Android
Добрый вечер всем!! Подскажите пожалуйста как обновить один фрагмент из другого (а именно TextView и ArrayAdapter)?

ViewPager - Программирование Android
Всем. Да я недалекий и тупой, уже дня три не могу никак понять :wall: Есть ViewPager &lt;android.support.v4.view.ViewPager ...

ViewPager - Программирование Android
Помогите пожалуйста. Использую эту фичу в своей программе(пример один и его очень много в поисковике). И столкнулся с проблемой. На...

ViewPager - Программирование Android
Здравствуйте! В приложении использовал пример с Хабра http://habrahabr.ru/post/131889/, однако, не могу понять как при прокрутке экранов...

AsyncTask - Программирование Android
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI нельзя. Когда я пытаюсь обновить вывод (в EditText) в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Никита Гриб
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
05.11.2015, 13:03 #2
Попробуй так. Смысл в том что ты вначале сетишь в адаптер пустой список . А когда подгрузишь данные обновляешь свой список. И выполняешь adapter.notifyDataSetChanged(). И adapter должен подтащить обновлённый лист и за сетить его в ListView.


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
List<ListEventModel> newItemsEvent 
EventListAdapter  eventAdapter;
 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, null);
        ListView eventList = (ListView) view.findViewById(R.id.list_events);
 
        newItemsEvent = new ArrayList<ListEventModel>();
        eventAdapter = new EventListAdapter(getActivity(),newItemsEvent);
        eventList.setAdapter(eventAdapte);
 
        new ListEventsAsync(eventList).execute();
 
        return view;
    }
 
 
  @Override
  protected void onPostExecute(final List<ListEventModel> result) {
            super.onPostExecute(result);
            setAdapter(result);
            Log.d("MYLOG", "set ADAPTER");
        }
 
 
   public void  setAdapter(List<ListEventModel> result){
 
        newItemsEvent =result;
        eventAdapter.notifyDataSetChanged();
   }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2015, 13:03
Привет! Вот еще темы с ответами:

AsyncTask и get() - Программирование Android
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный ProgressDialog. После выполнения задачи нужно выполнить действия....

AsyncTask - Программирование Android
Здравствуйте, при использовании двух одинаковых методов получается разный результат. AsyncTask в одном случае успешно передает данные в...

AsyncTask - Программирование Android
Использую AsyncTasc class MyT extends AsyncTask&lt;Void, Void, Void&gt; { @Override protected Void doInBackground(Void......

создание ViewPager - Программирование Android
здравствуйте,возник вопрос по ViewPager. Не получается добавить компоненты после ViewPager, т.е Статический компонент вверху и внизу,а по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru