Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Как прослушать ListView / 13 сообщений из 13, страница 1 из 1
19.09.2019, 09:51
    #39863732
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
Как прослушать в ListView что она закончила выгружать на экран все данные
...
Рейтинг: 0 / 0
19.09.2019, 10:21
    #39863758
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
Zafar Z,

Или какой implement для ListView существует чтобы прослушать окончание действия работы ListView
...
Рейтинг: 0 / 0
19.09.2019, 11:12
    #39863798
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
ListView не "выгружает на экран все данные". он рендерит только видимые элементы и часть за экраном. по мере скролла рендерятся новые элементы
...
Рейтинг: 0 / 0
19.09.2019, 11:32
    #39863814
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
chpasha,

как же узнать когда оно закончило рендерить?
...
Рейтинг: 0 / 0
19.09.2019, 11:46
    #39863833
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
Zafar Zкак же узнать когда оно закончило рендерить?
Встречный вопрос: зачем это знать?
...
Рейтинг: 0 / 0
19.09.2019, 11:54
    #39863839
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
wadmanВстречный вопрос: зачем это знать?
присоединяюсь к вопросу
...
Рейтинг: 0 / 0
19.09.2019, 12:09
    #39863852
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
wadman,
Проблема такова, создал анимацию поиска, в процессе загрузки данных в ListView (загружается иногда 10-50 секунд) анимация крутится, как загрузка закончилась анимация должна остановится.
...
Рейтинг: 0 / 0
19.09.2019, 12:28
    #39863870
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
Zafar Z,

думаю, что в коде проблема... Я писал просмотрщик всех входящих смс, а там их у меня тысячи (никогда не удаляются) и никаких тормозов нет. Все отображается мгновенно и листается без каких-либо тормозов.
...
Рейтинг: 0 / 0
19.09.2019, 12:35
    #39863879
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
wadman,
нет, с поиском проблем нет, просто тексты объемные, если в файлах буду показывать то 200 метров настигнет, а так под SQLITE запихиваю и после билдера апк весит всего лишь 10 метров. Если желаете код отправлю а ещё лучше весь проект на андроид студио
...
Рейтинг: 0 / 0
19.09.2019, 12:56
    #39863897
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
Zafar Z,

разве нужно весь текст разом показывать при прокрутке? Я-бы добавил краткую аннотацию, которая-бы и была в списке, а по клику можно и весь текст отобразить в отдельной активности.
...
Рейтинг: 0 / 0
19.09.2019, 13:01
    #39863902
Zafar Z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
wadman,

Я так и сделал, не показываю объемный текст (при клике лишь), но думаю все таки при поиске он зависает на 10 - 30 секунд
...
Рейтинг: 0 / 0
19.09.2019, 13:22
    #39863919
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
Zafar Zв процессе загрузки данных в ListView
есть отдельно процесс загрузки данных и его контролируешь ты. соответственно ты же должен быть в курсе, когда он окончится. ListView же в свою очередь, получает данные через Adapter уже когда они загружены - в этот момент уже нечему тормозить, разве что ты выполняешь какие-то дорогостоящие операции во время отрисовки элементов.
...
Рейтинг: 0 / 0
19.09.2019, 13:51
    #39863958
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прослушать ListView
chpasha,

по поводу адаптера хорошее замечание... Я видел примеры, где сначала всё грузится в массив и там как раз тормоза заложены изначально. :)

Пример шустрого адаптера (не мой, но чуть допиленный):
Код: 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.
package ru.wadman.smsrightsound.db;

/**
 * Created by wadman on 14.06.2016.
 */
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public abstract class QuickAdapter extends BaseAdapter {

    private final DataSource mDataSource;
    private int mSize = 0;
    private Cursor mRowIds = null;
    private final Context mContext;

    public QuickAdapter(final Context context, final DataSource dataSource) {
        mDataSource = dataSource;
        mContext = context;
        doQuery();
    }

    private void doQuery() {
        if (mRowIds != null) {
            mRowIds.close();
        }
        mRowIds = mDataSource.getRowIds();
        if (mRowIds != null) {
            mSize = mRowIds.getCount();
        } else {
            mSize = 0;
        }
    }

    @Override
    public void notifyDataSetChanged() {
        doQuery();
        super.notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mSize;
    }

    @Override
    public Object getItem(final int position) {
        if (mSize > 0 && mRowIds.moveToPosition(position)) {
            long rowId = mRowIds.getLong(0);
            return mDataSource.getRowById(rowId);
        } else {
            return null;
        }
    }

    @Override
    public long getItemId(final int position) {
        if (mSize > 0 && mRowIds.moveToPosition(position)) {
            return mRowIds.getLong(0);
        } else {
            return 0;
        }
    }

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {
        View v = null;
        Cursor cursor = (Cursor)getItem(position);
        if (cursor != null && cursor.moveToFirst()) {
            if (convertView == null) {
                v = newView(position, mContext, cursor, parent);
            } else {
                v = convertView;
            }
            bindView(position, v, mContext, cursor);
        }
        return (v == null ? convertView : v);
    }

    public abstract View newView(final int position, Context context, Cursor cursor, ViewGroup parent);

    public abstract void bindView(final int position, View view, Context context, Cursor cursor);

    public interface DataSource {
        Cursor getRowIds();

        Cursor getRowById(long rowId);
    }

}


Взят отсюда https://habr.com/ru/post/154931/

Он первым делом вытягивает только id записей и затем подгружает только те, которые в данный момент отображаются на экране.

Это его применение с вьюхолдером:

Код: 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.
    class RuleQuickAdapter extends QuickAdapter {

        public RuleQuickAdapter(Context context, DataSource dataSource) {
            super(context, dataSource);
        }

        @Override
        public View newView(final int position, Context context, Cursor cursor, ViewGroup parent) {
            View view = getLayoutInflater().inflate(R.layout.rule_item, null);
            RuleHolder rh = new RuleHolder();
            rh.pos = position;
            rh.tv1 = (TextView)view.findViewById(R.id.textView1);
            rh.tv2 = (TextView)view.findViewById(R.id.textView2);
            rh.iv = (ImageView)view.findViewById(R.id.imageView);
            rh.up = (Button)view.findViewById(R.id.buttonMoveUp);
            rh.down = (Button)view.findViewById(R.id.buttonMoveDown);
            rh.up.setTag(rh);
            rh.down.setTag(rh);
            rh.up.setOnClickListener(BrowseActivity.this);
            rh.down.setOnClickListener(BrowseActivity.this);
            view.setTag(rh);
            return view;
        }

        @Override
        public void bindView(final int position, View view, Context context, Cursor cursor) {
            RuleHolder rh = (RuleHolder)view.getTag();
            if (rh != null) {
                rh.rule = new Rule(cursor);
                rh.tv1.setText(rh.rule.getName());
                rh.tv2.setText(rh.rule.getNote(BrowseActivity.this));
                rh.up.setEnabled((rh.rule.getRuleType() != Rule.RULE_TYPE_DEFAULT) && (position > 0) && (mAdapter.getCount() > 0));
                rh.down.setEnabled((rh.rule.getRuleType() != Rule.RULE_TYPE_DEFAULT) && (position < mAdapter.getCount()-(rule == null ? 2 : 1)));
                switch (rh.rule.getRuleType()) {
                    case Rule.RULE_TYPE_FOLDER: {
                        rh.iv.setImageResource(R.drawable.ic_folder_white_18dp);
                        break;
                    }
                    default: {
                        rh.iv.setImageResource(R.drawable.ic_forum_white_18dp);
                        break;
                    }
                }
                if (rh.rule.getActive()) {
                    rh.tv1.setPaintFlags((rh.tv1.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)));
                } else {
                    rh.tv1.setPaintFlags(rh.tv1.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                }
            }
        }
    }

    class RuleDataSource implements QuickAdapter.DataSource {

        @Override
        public Cursor getRowIds() {
            if (rule == null) {
                return Helper.getDb().getWritableDatabase().rawQuery(Helper.rowIdsAll,null);
            } else {
                return Helper.getDb().getWritableDatabase().rawQuery(Helper.rowIds, new String[]{Long.toString(rule.getId())});
            }
        }

        @Override
        public Cursor getRowById(long rowId) {
            return Helper.getDb().getWritableDatabase().rawQuery(Helper.rowById, new String[]{Long.toString(rowId)});
        }
    }

    class RuleHolder {
        int pos;
        TextView tv1, tv2;
        Button up, down;
        ImageView iv;
        Rule rule;
    }

...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Как прослушать ListView / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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