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

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

Войти
Регистрация
Восстановить пароль
 
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
#1

Обновление recyclerview во время скрола - Программирование Android

04.01.2017, 21:24. Просмотров 312. Ответов 9
Метки нет (Все метки)

Как правильно обновлять данные во время скрола recyclerview?? Просто я очищаю адаптер recyclerview, отправляю запрос на сервер, получаю новые данные(картинки) и делаю notifydatasetcanged(), но recyclerview падает с ошибкой java.lang.IndexOutOfBoundsException: Inconsistency detected. Почему это происходит? И как исправить ошибку, чтобы и данные при скроле подгружались новые и recyclerview не падал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2017, 21:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обновление recyclerview во время скрола (Программирование Android):

Обновление содержимого Recyclerview - Программирование Android
Всем привет. Изучаю Android. Разрабатываю первое приложение. Создал список с помощью Recyclerview. Возникла проблема. После записи данных в...

Удаление элемента recyclerview и обновление списка - Программирование Android
Я загружаю фотки в recyclerview с сервера с определенной пагинацией. То есть сначала(при открытии фрагмента) загружаются первые десять штук...

Advanced RecyclerView и Expandable RecyclerView - Программирование Android
Сделал expandable recycler view на основе advancedRecyclerView сборочки, но не важно это думаю, наследуется от обычного RecyclerView. ...

RecyclerView внутри recyclerView - Программирование Android
Добрый день. Хочу сделать список recyclerView c горизонтальной прокруткой, который отображает допустим 20 элементов(card). Т.е....

Обновление ProgressBar во время длительной операции - Программирование Android
Добрый вечер! У меня в цикле происходят длительные вычисления, поэтому я решил сделать вот что: во-первых, они выполняются в отдельном...

SimpleCursorAdapter(ListView заполняется данными только после прокрутки скрола) - Программирование Android
Помогите решить задачу. У меня ListView начинает заполняться данными, только после первой прокрутки списка. Т.е в начальный момент список...

9
shavuz
114 / 120 / 23
Регистрация: 29.01.2014
Сообщений: 596
05.01.2017, 11:42 #2
покажите код.
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
05.01.2017, 16:09  [ТС] #3
ну там код большой в одном фрагменте идет запрос на добавление а в другой передает флаг через event bus и он делает запрос на получение фоток и если список скролить то ошибка происходит. Что прям весь этот код скинуть?
0
shavuz
114 / 120 / 23
Регистрация: 29.01.2014
Сообщений: 596
05.01.2017, 16:23 #4
ну если так на вскидку попробуйте сделать стопскроллинг ресайклеру перед нотифай. эта ошибка очень специфическая. может быть много причин почему она происходит. если стоп не поможет кидайте код
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
05.01.2017, 17:16  [ТС] #5
Гавный фрагмент с фотками
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
public class PhotosFragment extends Fragment {
    @Bind(R.id.photoList)
    RecyclerView photoList;
    LinearLayoutManager mLayoutManager;
    @Bind(R.id.emptyLayout)
    RelativeLayout emptyMessage;
    private ItemTouchHelper mItemTouchHelper;
    private PhotosAdapter adapter;
    @Bind(R.id.trash_can)
    LinearLayout delete;
    @Bind(R.id.trash_can_button)
    ImageButton deleted;
    @Bind(R.id.tab_fragment_first)
    RelativeLayout relativeLayout;
    private Api api;
    int tabFragmentType;
    int fragmentNumber;
    @Inject
    UserHelper userHelper;
    private static boolean loading = true;
    int pastVisiblesItems, visibleItemCount, totalItemCount;
    private CompositeSubscription compositeSubscription = new CompositeSubscription();
    private MyDreamer dreamer;
    boolean fromDreambook = false;
    //List<MyGaleryPhoto> photo;
    private final EventBus eventBus = EventBus.getDefault();
    private static int position;
    public static PhotosFragment newInstance(int tabFragmentType, MyDreamer dreamer) {
        PhotosFragment tapeFragment = new PhotosFragment();
        tapeFragment.tabFragmentType = tabFragmentType;
        tapeFragment.dreamer = dreamer;
        return tapeFragment;
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.photo_fragment, container, false);
 
        ButterKnife.bind(this, view);
        setHasOptionsMenu(true);
        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(R.string.photos);
        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        ((ToolbarControlCallback) getActivity()).initNavigationDrawerAndElement(toolbar);
        mLayoutManager = new GridLayoutManager(getActivity(), 2);
        App.getComponent().inject(this);
        if (!eventBus.isRegistered(this)) {
            eventBus.register(this);
        }
        //photoList.setLayoutManager(new WrapContentGridLayoutManager(getActivity(), 2));
        photoList.setLayoutManager(mLayoutManager);
        photoList.setAdapter(adapter);
        //adapter.update(photo);
        adapter.clearData();
        getDreamerPhotos("", null);
        setRecyclerViewListener();
        //setRecyclerViewListener();
 
        return view;
    }
 
    public static boolean getLoading() {
        return loading;
    }
 
    public static void setLoading(boolean value) {
        loading = value;
    }
 
    private void setRecyclerViewListener() {
 
        photoList.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0) //check for scroll down
                {
                    visibleItemCount = mLayoutManager.getChildCount();
                    totalItemCount = mLayoutManager.getItemCount();
                    pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();
 
                    if (loading) {
                        if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
                            loading = false;
                            Log.v("...", "Last Item Wow !");
                            getDreamerPhotos("",null);
 
                        }
                    }
                }
            }
        });
    }
 
    @Override
    public void onStart() {
        super.onStart();
        ((MainActivity) getActivity()).turnOffToolbarScrolling();
 
        int count = adapter.getItemCount();
        adapter.setDelete(delete);
        adapter.setDreamer(dreamer);
        adapter.setUserHelper(userHelper);
 
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            MyDragListener dragListener = new MyDragListener();
            photoList.setOnDragListener(dragListener);
            delete.setOnDragListener(dragListener);
        }
 
 
        if (count == 0) {
 
        } else {
            ((MainActivity) getActivity()).turnOffToolbarScrolling();
            adapter.setDelete(delete);
        }
 
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new PhotosAdapter(getActivity());
        api = RetrofitSingleton.getInstance().getRetrofit().create(Api.class);
    }
 
 
    @Override
    public void onDetach() {
        super.onDetach();
 
    }
 
    public void onPause() {
        super.onPause();
        ((MainActivity) getActivity()).turnOnToolbarScrolling();
    }
 
    @Override
    public void onDestroy() {
        compositeSubscription.unsubscribe();
        eventBus.unregister(this);
        super.onDestroy();
    }
 
 
    @Override
    public void onSaveInstanceState(Bundle outState) {
 
        super.onSaveInstanceState(outState);
    }
 
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
    }
 
 
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
 
        menu.clear();
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            inflater.inflate(R.menu.toolbar_photo, menu);
            super.onCreateOptionsMenu(menu, inflater);
        }
 
    }
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.add_delete:
                Map<String, Object> data = new HashMap<>();
                data.put("Integer", new Integer(Config.FTYPE_DREAMBOOK_PHOTO_EDIT));
                data.put("Dreamer", dreamer);
                eventBus.post(data);
                return true;
            case R.id.add_add:
                Map<String, Object> data1 = new HashMap<>();
                data1.put("Integer", new Integer(Config.FTYPE_DREAMBOOK_PHOTO_ADD));
                //data1.put("Photos", photo);
                eventBus.post(data1);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
 
   /* public void onEvent(Boolean bool) {
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            if (bool) {
                delete.setVisibility(View.VISIBLE);
            }
        }
    }*/
 
    public void onEvent(LinkedList<MyGaleryPhoto> list) {
 
        //photo.removeAll(list);
        //adapter.update(photo);
 
    }
 
    public void onEvent(Position pos) {
 
 
        position = pos.position;
 
 
    }
 
    public void onEvent(UploadPhoto uploadPhoto) {
 
 
       if(uploadPhoto.uploadFlag)
       {
           adapter.clearData();                                      // вот тот самый event по которому перезагружается список
 
           getDreamerPhotos("", null);
       }
 
 
    }
 
 
    public void getDreamerPhotosDelete(long id) {
        Observable<MyMetaPhotos> call = api.deletePhoto(id, RetrofitSingleton.getInstance().getToken());
        Subscription subscription = call
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<MyMetaPhotos>() {
                    @Override
                    public final void onCompleted() {
                        // do nothing
                    }
 
                    @Override
                    public final void onError(Throwable e) {
                        Log.e("getNewDreamsError", e.getMessage());
                    }
 
                    @Override
                    public void onNext(MyMetaPhotos getDreamerPhotosResponse) {
                        MyMetaPhotos photo = getDreamerPhotosResponse;
                    }
                });
 
        compositeSubscription.add(subscription);
    }
 
    public void getDreamerPhotos(String search, Map<String, Object> map) {
        Observable<GetDreamerPhotosResponse> call = api.getDreamerPhotos(dreamer.getId(), RetrofitSingleton.getInstance().getToken(), getDreamersPhotosParams(search, map, adapter));
        Subscription subscription = call
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<GetDreamerPhotosResponse>() {
                    @Override
                    public final void onCompleted() {
                        // do nothing
                    }
 
                    @Override
                    public final void onError(Throwable e) {
                        Log.e("getNewDreamsError", e.getMessage());
                    }
 
                    @Override
                    public void onNext(GetDreamerPhotosResponse getDreamerPhotosResponse) {
                        //photo = getDreamerPhotosResponse.getPhotos();
 
                        List<MyGaleryPhoto> curent = new LinkedList<MyGaleryPhoto>((LinkedList)adapter.getCurentItemsList());
                        List<MyGaleryPhoto> photoList = getDreamerPhotosResponse.getPhotos();
 
                        for (MyGaleryPhoto photo : photoList) {
                            curent.add(photo);
                        }
                        //adapter.update(curent);
                        if (curent.size() == 0) {
                            emptyMessage.setVisibility(View.VISIBLE);
                        } else {
 
                            adapter.update(curent);
                        }
                        loading = true;
                    }
                });
 
        compositeSubscription.add(subscription);
    }
 
    private Map<String, Object> getDreamersPhotosParams(String search, Map<String, Object> map, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
        Map<String, Object> params = new HashMap<>();
        if (map != null) {
            params = map;
        } else {
            int per = 10;
            params.put("per", new Integer(per));
            if (search != "") {
                params.put("search", new String(search));
            }
 
            int cnt = adapter.getItemCount();
 
            int page = (adapter.getItemCount() / per) + 1;
            if ((adapter.getItemCount() % per) != 0) {
                page++;
            }
 
            params.put("page", new Integer(page));
            if (search == "") {
                params.put("vip", new Boolean(true));
            }
        }
        return params;
    }
 
 
    boolean isTop(float y, float top) {
        if (y >= top) {
            return true;
        } else {
            return false;
        }
    }
 
    boolean getAction() {
        boolean action = adapter.getTochFlag();
 
        return action;
    }
 
 
    class MyDragListener implements View.OnDragListener {
 
 
        @Override
        public boolean onDrag(View v, DragEvent event) {
            View view = (View) event.getLocalState();
            // Handles each of the expected events
            switch (event.getAction()) {
 
                //signal for the start of a drag and drop operation.
                case DragEvent.ACTION_DRAG_STARTED:
                    // do nothing
                    break;
 
                //the drag point has entered the bounding box of the View
                case DragEvent.ACTION_DRAG_ENTERED:
                    View viewdrag = (View) event.getLocalState();
                    if(v.getId() == delete.getId())
                    {
                        deleted.setBackgroundResource(R.drawable.rectangle_red);
                        deleted.setImageResource(R.drawable.ic_delete_red);
                    }
                  //  v.setBackground(targetShape); //change the shape of the view
                    //deleted.setBackgroundResource(R.drawable.rectangle_red);
                    //deleted.setImageResource(R.drawable.ic_delete_red);
 
                    break;
 
               case DragEvent.ACTION_DRAG_LOCATION:
 
 
                break;
                //the user has moved the drag shadow outside the bounding box of the View
                case DragEvent.ACTION_DRAG_EXITED:
 
                    deleted.setImageResource(R.drawable.ic_delete_white);
                    deleted.setBackgroundResource(R.drawable.rectangle_no_red);
                   // v.setBackground(normalShape); //change the shape of the view back to normal
 
                    /*View viewdrag = (View) event.getLocalState();
                    ViewGroup owner = (ViewGroup) view.getParent();
                    if(owner.getId() == delete.getId())
                    {
                        deleted.setBackgroundResource(R.drawable.rectangle_red);
                        deleted.setImageResource(R.drawable.ic_delete_red);
                    }*/
                    break;
 
                //drag shadow has been released,the drag point is within the bounding box of the View
                case DragEvent.ACTION_DROP:
 
                    boolean dragFlag = event.getResult();
 
                    //v.invalidate();
                    if(v.getId() == delete.getId()) {
 
                        ViewGroup owner = (ViewGroup) view.getParent();
                        //owner.removeView(view);
                       // getDreamerPhotosDelete(photo.get(position).getId());
                        //photo.remove(position);
                        //adapter.update(photo);
                        deleted.setImageResource(R.drawable.ic_delete_white);
                        deleted.setBackgroundResource(R.drawable.rectangle_no_red);
                    }
 
                    else
                    {
                       view.setVisibility(View.VISIBLE);
 
                    }
                    delete.setVisibility(View.GONE);
 
                    break;
 
                //the drag and drop operation has concluded.
                case DragEvent.ACTION_DRAG_ENDED:
                   // v.setBackground(normalShape); //go back to normal shape
                   // v.invalidate();
                default:
                    break;
            }
            return true;
        }
    }
}
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
05.01.2017, 17:17  [ТС] #6
Гавный фрагмент с фотками
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
public class PhotosFragment extends Fragment {
    @Bind(R.id.photoList)
    RecyclerView photoList;
    LinearLayoutManager mLayoutManager;
    @Bind(R.id.emptyLayout)
    RelativeLayout emptyMessage;
    private ItemTouchHelper mItemTouchHelper;
    private PhotosAdapter adapter;
    @Bind(R.id.trash_can)
    LinearLayout delete;
    @Bind(R.id.trash_can_button)
    ImageButton deleted;
    @Bind(R.id.tab_fragment_first)
    RelativeLayout relativeLayout;
    private Api api;
    int tabFragmentType;
    int fragmentNumber;
    @Inject
    UserHelper userHelper;
    private static boolean loading = true;
    int pastVisiblesItems, visibleItemCount, totalItemCount;
    private CompositeSubscription compositeSubscription = new CompositeSubscription();
    private MyDreamer dreamer;
    boolean fromDreambook = false;
    //List<MyGaleryPhoto> photo;
    private final EventBus eventBus = EventBus.getDefault();
    private static int position;
    public static PhotosFragment newInstance(int tabFragmentType, MyDreamer dreamer) {
        PhotosFragment tapeFragment = new PhotosFragment();
        tapeFragment.tabFragmentType = tabFragmentType;
        tapeFragment.dreamer = dreamer;
        return tapeFragment;
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.photo_fragment, container, false);
 
        ButterKnife.bind(this, view);
        setHasOptionsMenu(true);
        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(R.string.photos);
        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        ((ToolbarControlCallback) getActivity()).initNavigationDrawerAndElement(toolbar);
        mLayoutManager = new GridLayoutManager(getActivity(), 2);
        App.getComponent().inject(this);
        if (!eventBus.isRegistered(this)) {
            eventBus.register(this);
        }
        //photoList.setLayoutManager(new WrapContentGridLayoutManager(getActivity(), 2));
        photoList.setLayoutManager(mLayoutManager);
        photoList.setAdapter(adapter);
        //adapter.update(photo);
        adapter.clearData();
        getDreamerPhotos("", null);
        setRecyclerViewListener();
        //setRecyclerViewListener();
 
        return view;
    }
 
    public static boolean getLoading() {
        return loading;
    }
 
    public static void setLoading(boolean value) {
        loading = value;
    }
 
    private void setRecyclerViewListener() {
 
        photoList.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0) //check for scroll down
                {
                    visibleItemCount = mLayoutManager.getChildCount();
                    totalItemCount = mLayoutManager.getItemCount();
                    pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();
 
                    if (loading) {
                        if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
                            loading = false;
                            Log.v("...", "Last Item Wow !");
                            getDreamerPhotos("",null);
 
                        }
                    }
                }
            }
        });
    }
 
    @Override
    public void onStart() {
        super.onStart();
        ((MainActivity) getActivity()).turnOffToolbarScrolling();
 
        int count = adapter.getItemCount();
        adapter.setDelete(delete);
        adapter.setDreamer(dreamer);
        adapter.setUserHelper(userHelper);
 
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            MyDragListener dragListener = new MyDragListener();
            photoList.setOnDragListener(dragListener);
            delete.setOnDragListener(dragListener);
        }
 
 
        if (count == 0) {
 
        } else {
            ((MainActivity) getActivity()).turnOffToolbarScrolling();
            adapter.setDelete(delete);
        }
 
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new PhotosAdapter(getActivity());
        api = RetrofitSingleton.getInstance().getRetrofit().create(Api.class);
    }
 
 
    @Override
    public void onDetach() {
        super.onDetach();
 
    }
 
    public void onPause() {
        super.onPause();
        ((MainActivity) getActivity()).turnOnToolbarScrolling();
    }
 
    @Override
    public void onDestroy() {
        compositeSubscription.unsubscribe();
        eventBus.unregister(this);
        super.onDestroy();
    }
 
 
    @Override
    public void onSaveInstanceState(Bundle outState) {
 
        super.onSaveInstanceState(outState);
    }
 
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
    }
 
 
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
 
        menu.clear();
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            inflater.inflate(R.menu.toolbar_photo, menu);
            super.onCreateOptionsMenu(menu, inflater);
        }
 
    }
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.add_delete:
                Map<String, Object> data = new HashMap<>();
                data.put("Integer", new Integer(Config.FTYPE_DREAMBOOK_PHOTO_EDIT));
                data.put("Dreamer", dreamer);
                eventBus.post(data);
                return true;
            case R.id.add_add:
                Map<String, Object> data1 = new HashMap<>();
                data1.put("Integer", new Integer(Config.FTYPE_DREAMBOOK_PHOTO_ADD));
                //data1.put("Photos", photo);
                eventBus.post(data1);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
 
   /* public void onEvent(Boolean bool) {
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            if (bool) {
                delete.setVisibility(View.VISIBLE);
            }
        }
    }*/
 
    public void onEvent(LinkedList<MyGaleryPhoto> list) {
 
        //photo.removeAll(list);
        //adapter.update(photo);
 
    }
 
    public void onEvent(Position pos) {
 
 
        position = pos.position;
 
 
    }
 
    public void onEvent(UploadPhoto uploadPhoto) {
 
 
       if(uploadPhoto.uploadFlag)
       {
           adapter.clearData();                                      // вот тот самый event по которому перезагружается список
 
           getDreamerPhotos("", null);
       }
 
 
    }
 
 
    public void getDreamerPhotosDelete(long id) {
        Observable<MyMetaPhotos> call = api.deletePhoto(id, RetrofitSingleton.getInstance().getToken());
        Subscription subscription = call
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<MyMetaPhotos>() {
                    @Override
                    public final void onCompleted() {
                        // do nothing
                    }
 
                    @Override
                    public final void onError(Throwable e) {
                        Log.e("getNewDreamsError", e.getMessage());
                    }
 
                    @Override
                    public void onNext(MyMetaPhotos getDreamerPhotosResponse) {
                        MyMetaPhotos photo = getDreamerPhotosResponse;
                    }
                });
 
        compositeSubscription.add(subscription);
    }
 
    public void getDreamerPhotos(String search, Map<String, Object> map) {
        Observable<GetDreamerPhotosResponse> call = api.getDreamerPhotos(dreamer.getId(), RetrofitSingleton.getInstance().getToken(), getDreamersPhotosParams(search, map, adapter));
        Subscription subscription = call
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<GetDreamerPhotosResponse>() {
                    @Override
                    public final void onCompleted() {
                        // do nothing
                    }
 
                    @Override
                    public final void onError(Throwable e) {
                        Log.e("getNewDreamsError", e.getMessage());
                    }
 
                    @Override
                    public void onNext(GetDreamerPhotosResponse getDreamerPhotosResponse) {
                        //photo = getDreamerPhotosResponse.getPhotos();
 
                        List<MyGaleryPhoto> curent = new LinkedList<MyGaleryPhoto>((LinkedList)adapter.getCurentItemsList());
                        List<MyGaleryPhoto> photoList = getDreamerPhotosResponse.getPhotos();
 
                        for (MyGaleryPhoto photo : photoList) {
                            curent.add(photo);
                        }
                        //adapter.update(curent);
                        if (curent.size() == 0) {
                            emptyMessage.setVisibility(View.VISIBLE);
                        } else {
 
                            adapter.update(curent);
                        }
                        loading = true;
                    }
                });
 
        compositeSubscription.add(subscription);
    }
 
    private Map<String, Object> getDreamersPhotosParams(String search, Map<String, Object> map, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
        Map<String, Object> params = new HashMap<>();
        if (map != null) {
            params = map;
        } else {
            int per = 10;
            params.put("per", new Integer(per));
            if (search != "") {
                params.put("search", new String(search));
            }
 
            int cnt = adapter.getItemCount();
 
            int page = (adapter.getItemCount() / per) + 1;
            if ((adapter.getItemCount() % per) != 0) {
                page++;
            }
 
            params.put("page", new Integer(page));
            if (search == "") {
                params.put("vip", new Boolean(true));
            }
        }
        return params;
    }
 
 
    boolean isTop(float y, float top) {
        if (y >= top) {
            return true;
        } else {
            return false;
        }
    }
 
    boolean getAction() {
        boolean action = adapter.getTochFlag();
 
        return action;
    }
 
 
    class MyDragListener implements View.OnDragListener {
 
 
        @Override
        public boolean onDrag(View v, DragEvent event) {
            View view = (View) event.getLocalState();
            // Handles each of the expected events
            switch (event.getAction()) {
 
                //signal for the start of a drag and drop operation.
                case DragEvent.ACTION_DRAG_STARTED:
                    // do nothing
                    break;
 
                //the drag point has entered the bounding box of the View
                case DragEvent.ACTION_DRAG_ENTERED:
                    View viewdrag = (View) event.getLocalState();
                    if(v.getId() == delete.getId())
                    {
                        deleted.setBackgroundResource(R.drawable.rectangle_red);
                        deleted.setImageResource(R.drawable.ic_delete_red);
                    }
                  //  v.setBackground(targetShape); //change the shape of the view
                    //deleted.setBackgroundResource(R.drawable.rectangle_red);
                    //deleted.setImageResource(R.drawable.ic_delete_red);
 
                    break;
 
               case DragEvent.ACTION_DRAG_LOCATION:
 
 
                break;
                //the user has moved the drag shadow outside the bounding box of the View
                case DragEvent.ACTION_DRAG_EXITED:
 
                    deleted.setImageResource(R.drawable.ic_delete_white);
                    deleted.setBackgroundResource(R.drawable.rectangle_no_red);
                   // v.setBackground(normalShape); //change the shape of the view back to normal
 
                    /*View viewdrag = (View) event.getLocalState();
                    ViewGroup owner = (ViewGroup) view.getParent();
                    if(owner.getId() == delete.getId())
                    {
                        deleted.setBackgroundResource(R.drawable.rectangle_red);
                        deleted.setImageResource(R.drawable.ic_delete_red);
                    }*/
                    break;
 
                //drag shadow has been released,the drag point is within the bounding box of the View
                case DragEvent.ACTION_DROP:
 
                    boolean dragFlag = event.getResult();
 
                    //v.invalidate();
                    if(v.getId() == delete.getId()) {
 
                        ViewGroup owner = (ViewGroup) view.getParent();
                        //owner.removeView(view);
                       // getDreamerPhotosDelete(photo.get(position).getId());
                        //photo.remove(position);
                        //adapter.update(photo);
                        deleted.setImageResource(R.drawable.ic_delete_white);
                        deleted.setBackgroundResource(R.drawable.rectangle_no_red);
                    }
 
                    else
                    {
                       view.setVisibility(View.VISIBLE);
 
                    }
                    delete.setVisibility(View.GONE);
 
                    break;
 
                //the drag and drop operation has concluded.
                case DragEvent.ACTION_DRAG_ENDED:
                   // v.setBackground(normalShape); //go back to normal shape
                   // v.invalidate();
                default:
                    break;
            }
            return true;
        }
    }
}
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
05.01.2017, 17:17  [ТС] #7
Гавный фрагмент с фотками
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
public class PhotosFragment extends Fragment {
   
    public static PhotosFragment newInstance(int tabFragmentType, MyDreamer dreamer) {
        PhotosFragment tapeFragment = new PhotosFragment();
        tapeFragment.tabFragmentType = tabFragmentType;
        tapeFragment.dreamer = dreamer;
        return tapeFragment;
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.photo_fragment, container, false);
 
        ButterKnife.bind(this, view);
        setHasOptionsMenu(true);
        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(R.string.photos);
        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        ((ToolbarControlCallback) getActivity()).initNavigationDrawerAndElement(toolbar);
        mLayoutManager = new GridLayoutManager(getActivity(), 2);
        App.getComponent().inject(this);
        if (!eventBus.isRegistered(this)) {
            eventBus.register(this);
        }
        //photoList.setLayoutManager(new WrapContentGridLayoutManager(getActivity(), 2));
        photoList.setLayoutManager(mLayoutManager);
        photoList.setAdapter(adapter);
        //adapter.update(photo);
        adapter.clearData();
        getDreamerPhotos("", null);
        setRecyclerViewListener();
        //setRecyclerViewListener();
 
        return view;
    }
 
    public static boolean getLoading() {
        return loading;
    }
 
    public static void setLoading(boolean value) {
        loading = value;
    }
 
    private void setRecyclerViewListener() {
 
        photoList.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0) //check for scroll down
                {
                    visibleItemCount = mLayoutManager.getChildCount();
                    totalItemCount = mLayoutManager.getItemCount();
                    pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();
 
                    if (loading) {
                        if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
                            loading = false;
                            Log.v("...", "Last Item Wow !");
                            getDreamerPhotos("",null);
 
                        }
                    }
                }
            }
        });
    }
 
    @Override
    public void onStart() {
        super.onStart();
        ((MainActivity) getActivity()).turnOffToolbarScrolling();
 
        int count = adapter.getItemCount();
        adapter.setDelete(delete);
        adapter.setDreamer(dreamer);
        adapter.setUserHelper(userHelper);
 
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            MyDragListener dragListener = new MyDragListener();
            photoList.setOnDragListener(dragListener);
            delete.setOnDragListener(dragListener);
        }
 
 
        if (count == 0) {
 
        } else {
            ((MainActivity) getActivity()).turnOffToolbarScrolling();
            adapter.setDelete(delete);
        }
 
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new PhotosAdapter(getActivity());
        api = RetrofitSingleton.getInstance().getRetrofit().create(Api.class);
    }
 
 
    @Override
    public void onDetach() {
        super.onDetach();
 
    }
 
    public void onPause() {
        super.onPause();
        ((MainActivity) getActivity()).turnOnToolbarScrolling();
    }
 
    @Override
    public void onDestroy() {
        compositeSubscription.unsubscribe();
        eventBus.unregister(this);
        super.onDestroy();
    }
 
 
    @Override
    public void onSaveInstanceState(Bundle outState) {
 
        super.onSaveInstanceState(outState);
    }
 
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
    }
 
 
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
 
        menu.clear();
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            inflater.inflate(R.menu.toolbar_photo, menu);
            super.onCreateOptionsMenu(menu, inflater);
        }
 
    }
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.add_delete:
                Map<String, Object> data = new HashMap<>();
                data.put("Integer", new Integer(Config.FTYPE_DREAMBOOK_PHOTO_EDIT));
                data.put("Dreamer", dreamer);
                eventBus.post(data);
                return true;
            case R.id.add_add:
                Map<String, Object> data1 = new HashMap<>();
                data1.put("Integer", new Integer(Config.FTYPE_DREAMBOOK_PHOTO_ADD));
                //data1.put("Photos", photo);
                eventBus.post(data1);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
 
   /* public void onEvent(Boolean bool) {
        if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
            if (bool) {
                delete.setVisibility(View.VISIBLE);
            }
        }
    }*/
 
    public void onEvent(LinkedList<MyGaleryPhoto> list) {
 
        //photo.removeAll(list);
        //adapter.update(photo);
 
    }
 
    public void onEvent(Position pos) {
 
 
        position = pos.position;
 
 
    }
 
    public void onEvent(UploadPhoto uploadPhoto) {
 
 
       if(uploadPhoto.uploadFlag)
       {
           adapter.clearData();                                      // вот тот самый event по которому перезагружается список
 
           getDreamerPhotos("", null);
       }
 
 
    }
 
 
    public void getDreamerPhotosDelete(long id) {
        Observable<MyMetaPhotos> call = api.deletePhoto(id, RetrofitSingleton.getInstance().getToken());
        Subscription subscription = call
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<MyMetaPhotos>() {
                    @Override
                    public final void onCompleted() {
                        // do nothing
                    }
 
                    @Override
                    public final void onError(Throwable e) {
                        Log.e("getNewDreamsError", e.getMessage());
                    }
 
                    @Override
                    public void onNext(MyMetaPhotos getDreamerPhotosResponse) {
                        MyMetaPhotos photo = getDreamerPhotosResponse;
                    }
                });
 
        compositeSubscription.add(subscription);
    }
 
    public void getDreamerPhotos(String search, Map<String, Object> map) {
        Observable<GetDreamerPhotosResponse> call = api.getDreamerPhotos(dreamer.getId(), RetrofitSingleton.getInstance().getToken(), getDreamersPhotosParams(search, map, adapter));
        Subscription subscription = call
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<GetDreamerPhotosResponse>() {
                    @Override
                    public final void onCompleted() {
                        // do nothing
                    }
 
                    @Override
                    public final void onError(Throwable e) {
                        Log.e("getNewDreamsError", e.getMessage());
                    }
 
                    @Override
                    public void onNext(GetDreamerPhotosResponse getDreamerPhotosResponse) {
                        //photo = getDreamerPhotosResponse.getPhotos();
 
                        List<MyGaleryPhoto> curent = new LinkedList<MyGaleryPhoto>((LinkedList)adapter.getCurentItemsList());
                        List<MyGaleryPhoto> photoList = getDreamerPhotosResponse.getPhotos();
 
                        for (MyGaleryPhoto photo : photoList) {
                            curent.add(photo);
                        }
                        //adapter.update(curent);
                        if (curent.size() == 0) {
                            emptyMessage.setVisibility(View.VISIBLE);
                        } else {
 
                            adapter.update(curent);
                        }
                        loading = true;
                    }
                });
 
        compositeSubscription.add(subscription);
    }
 
    private Map<String, Object> getDreamersPhotosParams(String search, Map<String, Object> map, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
        Map<String, Object> params = new HashMap<>();
        if (map != null) {
            params = map;
        } else {
            int per = 10;
            params.put("per", new Integer(per));
            if (search != "") {
                params.put("search", new String(search));
            }
 
            int cnt = adapter.getItemCount();
 
            int page = (adapter.getItemCount() / per) + 1;
            if ((adapter.getItemCount() % per) != 0) {
                page++;
            }
 
            params.put("page", new Integer(page));
            if (search == "") {
                params.put("vip", new Boolean(true));
            }
        }
        return params;
    }
 
 
    boolean isTop(float y, float top) {
        if (y >= top) {
            return true;
        } else {
            return false;
        }
    }
 
    boolean getAction() {
        boolean action = adapter.getTochFlag();
 
        return action;
    }
 
 
    class MyDragListener implements View.OnDragListener {
 
 
        @Override
        public boolean onDrag(View v, DragEvent event) {
            View view = (View) event.getLocalState();
            // Handles each of the expected events
            switch (event.getAction()) {
 
                //signal for the start of a drag and drop operation.
                case DragEvent.ACTION_DRAG_STARTED:
                    // do nothing
                    break;
 
                //the drag point has entered the bounding box of the View
                case DragEvent.ACTION_DRAG_ENTERED:
                    View viewdrag = (View) event.getLocalState();
                    if(v.getId() == delete.getId())
                    {
                        deleted.setBackgroundResource(R.drawable.rectangle_red);
                        deleted.setImageResource(R.drawable.ic_delete_red);
                    }
                  //  v.setBackground(targetShape); //change the shape of the view
                    //deleted.setBackgroundResource(R.drawable.rectangle_red);
                    //deleted.setImageResource(R.drawable.ic_delete_red);
 
                    break;
 
               case DragEvent.ACTION_DRAG_LOCATION:
 
 
                break;
                //the user has moved the drag shadow outside the bounding box of the View
                case DragEvent.ACTION_DRAG_EXITED:
 
                    deleted.setImageResource(R.drawable.ic_delete_white);
                    deleted.setBackgroundResource(R.drawable.rectangle_no_red);
                   // v.setBackground(normalShape); //change the shape of the view back to normal
 
                    /*View viewdrag = (View) event.getLocalState();
                    ViewGroup owner = (ViewGroup) view.getParent();
                    if(owner.getId() == delete.getId())
                    {
                        deleted.setBackgroundResource(R.drawable.rectangle_red);
                        deleted.setImageResource(R.drawable.ic_delete_red);
                    }*/
                    break;
 
                //drag shadow has been released,the drag point is within the bounding box of the View
                case DragEvent.ACTION_DROP:
 
                    boolean dragFlag = event.getResult();
 
                    //v.invalidate();
                    if(v.getId() == delete.getId()) {
 
                        ViewGroup owner = (ViewGroup) view.getParent();
                        //owner.removeView(view);
                       // getDreamerPhotosDelete(photo.get(position).getId());
                        //photo.remove(position);
                        //adapter.update(photo);
                        deleted.setImageResource(R.drawable.ic_delete_white);
                        deleted.setBackgroundResource(R.drawable.rectangle_no_red);
                    }
 
                    else
                    {
                       view.setVisibility(View.VISIBLE);
 
                    }
                    delete.setVisibility(View.GONE);
 
                    break;
 
                //the drag and drop operation has concluded.
                case DragEvent.ACTION_DRAG_ENDED:
                   // v.setBackground(normalShape); //go back to normal shape
                   // v.invalidate();
                default:
                    break;
            }
            return true;
        }
    }
}
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
05.01.2017, 17:21  [ТС] #8
Фрагмент добавления фоток
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
public class PhotosAddFragment extends Fragment {
    
 
    public static PhotosAddFragment newInstance(int tabFragmentType) {
        PhotosAddFragment tapeFragment = new PhotosAddFragment();
        tapeFragment.tabFragmentType = tabFragmentType;
        return tapeFragment;
    }
 
    PhotosAddAdapter getAdapter() {
        return adapter;
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.photo_add_fragment, container, false);
        ButterKnife.bind(this, view);
        setHasOptionsMenu(true);
        requestGaleryPhotos();
       /* if (adapter.getAddPhotosModel().getList() != null) {
            adapter.getAddPhotosModel().getList().clear();
            adapter.getUploadPhoto().clear();
        }*/
 
        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_back_button);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                getFragmentManager().popBackStack();
            }
        });
        ((MainActivity) getActivity()).turnOffToolbarScrolling();
        mLayoutManager = new GridLayoutManager(getActivity(), 3);
        if (!eventBus.isRegistered(this)) {
            eventBus.register(this);
        }
 
        photoList.setLayoutManager(mLayoutManager);
        photoList.setAdapter(adapter);
 
        return view;
    }
 
 
    @Override
    public void onStart() {
        super.onStart();
        photos = new LinkedList<>();
        adapter.setDelete_ed(deleted_ed);
        adapter.setDelete(del);
        adapter.setCancel(cancel);
        int count = adapter.getItemCount();
        if (count == 0) {
 
        }
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new PhotosAddAdapter(getActivity(), getActivity());
        api = RetrofitSingleton.getInstance().getRetrofit().create(Api.class);
    }
 
    public void onPause() {
        super.onPause();
        ((MainActivity) getActivity()).turnOnToolbarScrolling();
    }
 
    @Override
    public void onDetach() {
        super.onDetach();
 
    }
 
    @Override
    public void onDestroy() {
        compositeSubscription.unsubscribe();
        adapter.resetSelectedPhotos();
        super.onDestroy();
    }
 
 
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }
 
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
    }
 
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_PIC_REQUEST && resultCode == Activity.RESULT_OK) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            Uri tempUri = data.getData();
 
            String url = getRealPathFromURI(tempUri);
            MyGaleryLocalPhoto myCameraPhoto = new MyGaleryLocalPhoto();
            myCameraPhoto.setThumbnailPath(url);
            LinkedList<MyGaleryLocalPhoto> myCameralist = new LinkedList<MyGaleryLocalPhoto>();
            myCameralist.add(myCameraPhoto);
            uploadPhoto(myCameralist, 0);
        }
    }
 
    private void uploadPhoto(final LinkedList<MyGaleryLocalPhoto> list, final int i) {
        File file = new File(list.get(i).getThumbnailPath());
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
 
        Call<CreatePhotosResponse> call = api.addPhoto(RetrofitSingleton.getInstance().getToken(), body);
        call.enqueue(new Callback<CreatePhotosResponse>() {
            @Override
            public void onResponse(Call<CreatePhotosResponse> call, Response<CreatePhotosResponse> response) {
                response.body().getMetas();
                PostPhoto post = response.body().getPhoto();
                UploadPhoto uploadPhoto = new UploadPhoto();
                uploadPhoto.uploadFlag = true;
 
                int k = i + 1;
                if (k < list.size()) {
                    if (response.body().getMetas().getCode() == 200) {
                        eventBus.post(uploadPhoto);                                  // отпраляю событие добавления фото в главный фрагмент с фотками
                        uploadPhoto(list, k);
                    }
                }
 
 
            }
 
            @Override
            public void onFailure(Call<CreatePhotosResponse> call, Throwable t) {
                Log.e("Upload error:", t.getMessage());
            }
        });
    }
 
    public void onEvent(AddPhotosModel model) {
        uploadPhoto((LinkedList<MyGaleryLocalPhoto>) model.getList(), 0);
 
    }
 
    public void onEvent(CameraModel model) {
 
        if (model.isFlag()) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            getActivity().startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
 
        }
    }
 
    private void getPhotosFromGalery() {
 
        Cursor cursor = getActivity().getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
                null, null);
 
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    String thumbnailID = cursor.getString(cursor
                            .getColumnIndex(MediaStore.Images.Thumbnails._ID));
 
                    String thumbnailPath = getThumbnailPathForLocalFile(Long.parseLong(thumbnailID));
                    String path = cursor.getString(cursor
                            .getColumnIndex(MediaStore.Images.Media.DATA));
 
                    MyGaleryLocalPhoto localPhoto = new MyGaleryLocalPhoto();
                    localPhoto.setPhotoPath(path);
                    localPhoto.setThumbnailPath(thumbnailPath);
                    if (thumbnailPath != null && path != null) {
                        photo.add(localPhoto);
                    }
 
                    String s = "";
                } while (cursor.moveToNext());
            }
            cursor.close();
        }
    }
 
    private String getThumbnailPathForLocalFile(long fileId) {
        Cursor thumbCursor = null;
        try {
            thumbCursor = getContext().getContentResolver().
                    query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI
                            , null
                            , MediaStore.Images.Thumbnails.IMAGE_ID + " = " + fileId + " AND "
                                    + MediaStore.Images.Thumbnails.KIND + " = "
                                    + MediaStore.Images.Thumbnails.MINI_KIND, null, null);
 
            if (thumbCursor.moveToFirst()) {
                // the path is stored in the DATA column
                int dataIndex = thumbCursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                String thumbnailPath = thumbCursor.getString(dataIndex);
                return thumbnailPath;
            }
        } finally {
            if (thumbCursor != null) {
                thumbCursor.close();
            }
        }
 
        return null;
    }
 
 
    public void requestGaleryPhotos() {
        Observable.create(new Observable.OnSubscribe<Void>() {
            @Override
            public void call(Subscriber<? super Void> subscriber) {
                getPhotosFromGalery();
                subscriber.onNext(null);
                subscriber.onCompleted();
            }
        })
 
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Void>() {
                    @Override
                    public void onCompleted() {
                    }
 
                    @Override
                    public void onError(Throwable e) {
                    }
 
                    @Override
                    public void onNext(Void aVoid) {
 
                        for (int i = 0; i < photo.size(); i++) {
                            photoString.add(photo.get(i).getThumbnailPath());
                        }
                        adapter.update(photoString);
                    }
                });
    }
 
    public String getRealPathFromURI(Uri contentUri) {
        try {
            String[] proj = {MediaStore.Images.Media.DATA};
            Cursor cursor = getActivity().managedQuery(contentUri, proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } catch (Exception e) {
            return contentUri.getPath();
        }
    }
 
}
Добавлено через 2 минуты
Адаптер фрагмента добавления фоток
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
public class PhotosAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> /*implements ItemTouchHelperAdapter*/ {
 
    private final static int LAYOUT = R.layout.item_dreamer_photos;
    private final List<MyGaleryPhoto> items = new LinkedList<>();
    private static boolean touchFlag = false;
    private static int positionItem;
    private final LayoutInflater inflater;
    private LikeDreamCallback mLikeDreamCallback;
    private RecyclerView recyclerView;
    Context ctx;
    private LinearLayout delete;
    private final EventBus eventBus = EventBus.getDefault();
    private MyDreamer dreamer;
    private UserHelper userHelper;
    public PhotosAdapter(Context context) {
 
        inflater = LayoutInflater.from(context);
        this.ctx = context;
 
    }
 
    public void setUserHelper(UserHelper userHelper) {
        this.userHelper = userHelper;
    }
 
    public void setDreamer(MyDreamer dreamer) {
 
        this.dreamer = dreamer;
    }
 
    public void setDelete(LinearLayout delete)
    {
        this.delete = delete;
    }
 
    public static int getPositionItem() {
        return positionItem;
    }
 
    public static boolean getTochFlag() {
        return touchFlag;
    }
 
    public static void setTochFlag(boolean flag) {
        touchFlag = flag;
    }
 
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
        this.recyclerView = recyclerView;
    }
 
    @Override
    public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
        super.onDetachedFromRecyclerView(recyclerView);
        this.recyclerView = null;
    }
 
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View root = inflater.inflate(LAYOUT, parent, false);
        return new ViewHolder(root);
    }
 
    @Override
    public int getItemViewType(int position) {
        return 0;
    }
 
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
 
        final MyGaleryPhoto item = items.get(position);
        ((ViewHolder) holder).setData(items, eventBus, ctx, position, item, delete, dreamer,userHelper);
    }
 
    @Override
    public long getItemId(int pos) {
        return 0;
    }
 
    public List<MyGaleryPhoto> getCurentItemsList() {
        return items;
    }
 
    @Override
    public int getItemCount() {
        return items.size();
    }
 
    public void clearData() {
        // clear the data
        items.clear();
    }
 
    @UiThread
    public void update(List<MyGaleryPhoto> items) {
        this.items.clear();
        this.items.addAll(items);
        notifyDataSetChanged();
 
    }
 
    /*@Override
    public boolean onItemMove(int fromPosition, int toPosition) {
 
        return false;
    }
 
    @Override
    public void onItemDismiss(int position) {
    }*/
 
    static class ViewHolder extends RecyclerView.ViewHolder {
 
        @Bind(R.id.user_photo)
        ImageView userPhoto;
 
        public ViewHolder(View root) {
            super(root);
            ButterKnife.bind(this, root);
        }
 
        void setData(final List<MyGaleryPhoto> photos, final EventBus eventBus, final Context ctx, final int position, MyGaleryPhoto item, final LinearLayout delete, MyDreamer dreamer, UserHelper userHelper) {
            Picasso.with(ctx)
                    .load(photos.get(position).getPhoto())
                    .into(userPhoto);
 
            userPhoto.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    new PhotoViewerFragmentCaller(ctx, photos).onPhotoClicked(userPhoto, position);
                }
            });
            if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
                userPhoto.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                    /*touchFlag = true;
                    positionItem = position;
                    eventBus.post(new Boolean(true));*/
 
                        delete.setVisibility(View.VISIBLE);//ТА САМАЯ КОРЗИНА ВНИЗУ
                        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
 
                   /* View.OnDragListener shadowBuilder = new View.OnDragListener() {
                        @Override
                        public boolean onDrag(View v, DragEvent event) {
                            return false;
                        }
                    };*/
                        userPhoto.setVisibility(View.GONE);
                        //v.setVisibility(View.GONE);
                        //v.setOnDragListener(shadowBuilder);
                        v.startDrag(null, shadowBuilder, v, 0);
                        v.bringToFront();
                        Position pos= new Position();
                        pos.position = position;
                        eventBus.post(pos);
                        return true;
                    }
                });
            }
 
                userPhoto.setVisibility(View.VISIBLE);
 
        }
    }
    
}
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
05.01.2017, 17:23  [ТС] #9
Адаптер главного фрагмента
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
public class PhotosAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> /*implements ItemTouchHelperAdapter*/ {
 
    private final static int LAYOUT = R.layout.item_dreamer_photos;
    private final List<MyGaleryPhoto> items = new LinkedList<>();
    private static boolean touchFlag = false;
    private static int positionItem;
    private final LayoutInflater inflater;
    private LikeDreamCallback mLikeDreamCallback;
    private RecyclerView recyclerView;
    Context ctx;
    private LinearLayout delete;
    private final EventBus eventBus = EventBus.getDefault();
    private MyDreamer dreamer;
    private UserHelper userHelper;
    public PhotosAdapter(Context context) {
 
        inflater = LayoutInflater.from(context);
        this.ctx = context;
 
    }
 
    public void setUserHelper(UserHelper userHelper) {
        this.userHelper = userHelper;
    }
 
    public void setDreamer(MyDreamer dreamer) {
 
        this.dreamer = dreamer;
    }
 
    public void setDelete(LinearLayout delete)
    {
        this.delete = delete;
    }
 
    public static int getPositionItem() {
        return positionItem;
    }
 
    public static boolean getTochFlag() {
        return touchFlag;
    }
 
    public static void setTochFlag(boolean flag) {
        touchFlag = flag;
    }
 
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
        this.recyclerView = recyclerView;
    }
 
    @Override
    public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
        super.onDetachedFromRecyclerView(recyclerView);
        this.recyclerView = null;
    }
 
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View root = inflater.inflate(LAYOUT, parent, false);
        return new ViewHolder(root);
    }
 
    @Override
    public int getItemViewType(int position) {
        return 0;
    }
 
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
 
        final MyGaleryPhoto item = items.get(position);
        ((ViewHolder) holder).setData(items, eventBus, ctx, position, item, delete, dreamer,userHelper);
    }
 
    @Override
    public long getItemId(int pos) {
        return 0;
    }
 
    public List<MyGaleryPhoto> getCurentItemsList() {
        return items;
    }
 
    @Override
    public int getItemCount() {
        return items.size();
    }
 
    public void clearData() {
        // clear the data
        items.clear();
    }
 
    @UiThread
    public void update(List<MyGaleryPhoto> items) {
        this.items.clear();
        this.items.addAll(items);
        notifyDataSetChanged();
 
    }
 
    /*@Override
    public boolean onItemMove(int fromPosition, int toPosition) {
 
        return false;
    }
 
    @Override
    public void onItemDismiss(int position) {
    }*/
 
    static class ViewHolder extends RecyclerView.ViewHolder {
 
        @Bind(R.id.user_photo)
        ImageView userPhoto;
 
        public ViewHolder(View root) {
            super(root);
            ButterKnife.bind(this, root);
        }
 
        void setData(final List<MyGaleryPhoto> photos, final EventBus eventBus, final Context ctx, final int position, MyGaleryPhoto item, final LinearLayout delete, MyDreamer dreamer, UserHelper userHelper) {
            Picasso.with(ctx)
                    .load(photos.get(position).getPhoto())
                    .into(userPhoto);
 
            userPhoto.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    new PhotoViewerFragmentCaller(ctx, photos).onPhotoClicked(userPhoto, position);
                }
            });
            if (dreamer.getId() != userHelper.getUser().getUserId() == false) {
                userPhoto.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                    /*touchFlag = true;
                    positionItem = position;
                    eventBus.post(new Boolean(true));*/
 
                        delete.setVisibility(View.VISIBLE);//ТА САМАЯ КОРЗИНА ВНИЗУ
                        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
 
                   /* View.OnDragListener shadowBuilder = new View.OnDragListener() {
                        @Override
                        public boolean onDrag(View v, DragEvent event) {
                            return false;
                        }
                    };*/
                        userPhoto.setVisibility(View.GONE);
                        //v.setVisibility(View.GONE);
                        //v.setOnDragListener(shadowBuilder);
                        v.startDrag(null, shadowBuilder, v, 0);
                        v.bringToFront();
                        Position pos= new Position();
                        pos.position = position;
                        eventBus.post(pos);
                        return true;
                    }
                });
            }
 
                userPhoto.setVisibility(View.VISIBLE);
 
        }
    }
    
}
Добавлено через 1 минуту
этого кода достаточно? или что то добавить уточнить? ну и в чем ошибка?
0
shavuz
114 / 120 / 23
Регистрация: 29.01.2014
Сообщений: 596
05.01.2017, 17:56 #10
Цитата Сообщение от yura91 Посмотреть сообщение
this.items.clear();
* * * * this.items.addAll(items);
вот. тут скорее всего. есть другой варриант как добавлять в адаптер. посмотрите в интернете
0
05.01.2017, 17:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2017, 17:56
Привет! Вот еще темы с ответами:

RecyclerView - Программирование Android
Скажите что делаю не так. Цель: выводить содержимое бд заголовок, текст и т.п. Как я делал, точнее по гайдам. Тут из базы передаю...

RecyclerView Adapter - Программирование Android
Пример классического создания адаптера RecyclerView public class UserDialogRecyclerAdapter extends...

RecyclerView и SQLite - Программирование Android
Здравствуйте делал по этому гайду RecyclerView http://www.vogella.com/tutorials/AndroidRecyclerView/article.html#exercise_recycleview . У...

Recyclerview-stickyheaders - Программирование Android
Подскажите кто пожалуйста как сделать recyclerview-stickyheaders как в ссылке только с cardView. ...


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

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

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