powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Как прослушать ListView
13 сообщений из 13, страница 1 из 1
Как прослушать ListView
    #39863732
Zafar Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как прослушать в ListView что она закончила выгружать на экран все данные
...
Рейтинг: 0 / 0
Как прослушать ListView
    #39863758
Zafar Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zafar Z,

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

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

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

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

Я так и сделал, не показываю объемный текст (при клике лишь), но думаю все таки при поиске он зависает на 10 - 30 секунд
...
Рейтинг: 0 / 0
Как прослушать ListView
    #39863919
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zafar Zв процессе загрузки данных в ListView
есть отдельно процесс загрузки данных и его контролируешь ты. соответственно ты же должен быть в курсе, когда он окончится. ListView же в свою очередь, получает данные через Adapter уже когда они загружены - в этот момент уже нечему тормозить, разве что ты выполняешь какие-то дорогостоящие операции во время отрисовки элементов.
...
Рейтинг: 0 / 0
Как прослушать ListView
    #39863958
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
13 сообщений из 13, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Как прослушать ListView
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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