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

Статический listener - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Обработать событие onBackPressed во фрагменте http://www.cyberforum.ru/android-dev/thread1792647.html
У меня есть фрагмент который запускается через транзакцию и как можно обработать в нем нажатие кнопки back и выполнить определенные действия?
Программирование Android Не отображается Google map Добрый день. Сразу скажу, перерыл весь форум, но это не помогло. Я начинаю только разбираться в Android Studio, поэтому сильно не пинайте. Мануалы то же читал, то же не помогает. Ситуация такая: если... http://www.cyberforum.ru/android-dev/thread1792638.html
Сложить 2 цвета и установить цвет статус бар Программирование Android
Есть цвет #f78536 и на него накладывается тень #1a000000. Какой будет результирующий цвет? Как это можно узнать? И как потом программно установить этот результирующий цвет в статус бар?
Генератор звукового сигнала Программирование Android
Здравствуйте, кто может помочь написать простенький генератор сигнала, синус. Важна любая помощь. По интернетам смотрел информации мало. Если у кого-то есть желание, может в личку написать, может...
Программирование Android Задать таймаут перед разрывом блютуз соединения http://www.cyberforum.ru/android-dev/thread1792492.html
Привет! Товарищи, подскажите как реализовать возможность разрывать bluetooth соединение между двумя девайсами после определенного времени. К примеру два девайся оказались на недопустимом расстоянии...
Программирование Android Клавиатура. Как можно упростить использование? Появилось несколько вопросов по клавиатуре. 1) Можно ли сделать программное нажатие кнопки на клавиатуре? А именно микрофон (распознавание речи) То есть чтобы например по клику в edittext сразу... подробнее

Показать сообщение отдельно
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
15.08.2016, 11:24  [ТС]
Забыл добавить, в статье https://habrahabr.ru/post/258195/ рекомендуют использовать WeakReference, правда, там приложение к своему случаю + использование стороннего кода. И ListView, и RecyclerView, как следует из многочисленных статей, не хранят ссылки на элементы, ушедшие с экрана. Т.е. проблема, вероятно, в Glide. Код могу привести, только вряд ли это поможет.

Добавлено через 16 минут
Удалил лишнее (проверки, TextView), вот что осталось. Часть методов также опустил, они не должны влиять на увеличение памяти.
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
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final ViewHolder viewHolder = (ViewHolder) holder;
        final Item item = this.items.get(position);
 
            // Убираем скачки при прокрутке, для этого устанавливаем высоту ImageView.
            if (item.photoHeight > 0) {
                viewHolder.photo.getLayoutParams().height = item.photoHeight;
                viewHolder.photo.requestLayout();
            }
 
            if (viewHolder.photoUrl == null
                    || !viewHolder.photoUrl.equals(item.photoUrl) && !viewHolder.photoUrl.equals(item.thumbUrl)
                    || viewHolder.photo.getDrawable() == null) {
 
                downloadPhoto(item, viewHolder);
            }
 
            viewHolder.number.setText(item.number);
    }
 
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(resource, parent, false);
        return new ViewHolder(view);
    }
 
//    @Override
//    public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) {
//        super.onViewDetachedFromWindow(holder);
//        ViewHolder viewHolder = (ViewHolder) holder;
//        Glide.clear(viewHolder.photo);
//    }
 
    /**
     * Загрузить фотографию.
     */
    private Target<GlideDrawable> downloadPhoto(final Item item, final ViewHolder viewHolder) {
        return Glide.with(context)
                .load(item.photoUrl)
                .crossFade(0)
                .thumbnail(getThumbnailRequest(item, viewHolder))
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
//                        .skipMemoryCache(true)
                .placeholder(R.drawable.placeholder)
                .fallback(R.drawable.placeholder)
                .error(R.drawable.placeholder)
                .listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                        return false;
                    }
 
                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                        viewHolder.photoUrl = item.photoUrl;
                        item.photoHeight = getImageViewHeight(resource, viewHolder.photo);
                        return false;
                    }
                })
                .into(viewHolder.photo);
    }
Разметку не даю, думаю, пока нет необходимости. Там FrameLayout, в котором есть ProgressBar, LinearLayout с фотографией, текстом.
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
    public static class Item {
        public String number;
        public String photoUrl; // Путь к фотографии.
        public String thumbUrl; // Путь к уменьшенному изображению.
        public int photoHeight;
 
        public Item() {
        }
 
        public Item(String number,String photoUrl, String thumbUrl) {
            this.number = number;
            this.photoUrl = photoUrl;
            this.thumbUrl = thumbUrl;
            this.photoHeight = 0;
        }
    }
 
    private static class ViewHolder extends RecyclerView.ViewHolder {
        protected final ImageView photo;
        protected final TextView number;
        protected String photoUrl;
 
        public ViewHolder(View view) {
            super(view);
            this.photo = (ImageView) view.findViewById(R.id.photo);
            this.number = (TextView) view.findViewById(R.id.number);
        }
    }
Добавлено через 4 минуты
Конструктор адаптера тривиален, но приведу, на всякий случай.
Java
1
2
3
4
5
6
7
8
9
10
11
12
    private final Context context;
    private final int resource;
    private final List<Item> items;
    private final LayoutInflater inflater;
 
    public SomeAdapter(Context context, int resource, List<Item> items) {
        super();
        this.context = context;
        this.resource = resource;
        this.items = items;
        this.inflater = LayoutInflater.from(context);
    }
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru