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

AsyncTask в Fragment и viewPager - Android

Восстановить пароль Регистрация
 
EgorDybovik
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 126
04.11.2015, 16:04     AsyncTask в Fragment и viewPager #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);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2015, 16:04     AsyncTask в Fragment и viewPager
Посмотрите здесь:

ViewPager Android
Android ViewPager
ViewPager Indicator Android
Android Поворот ViewPager
ViewPager Android
GridView и ViewPager Android
Android AsyncTask
Android ViewPager, Fragment и SimpleCursorAdapter, обновить соседнюю страницу
Android AsyncTask и get()
AsyncTask Android
Android Обновление fragment из другого fragment
AsyncTask Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Никита Гриб
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
05.11.2015, 13:03     AsyncTask в Fragment и viewPager #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();
   }
Yandex
Объявления
05.11.2015, 13:03     AsyncTask в Fragment и viewPager
Ответ Создать тему
Опции темы

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