powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / setViewValue с точки зрения производительности
12 сообщений из 12, страница 1 из 1
setViewValue с точки зрения производительности
    #38808913
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иду дальше на пути визуализации данных из базы.
Когда в ListView Item только текстовые метки, то особых проблем нет. Много, конечно, ручками всё равно.

Столкнулся с тем, что если в ListView Item, кроме текстовых меток, есть ещё и 2 переключателя (Checkbox), то приходится писать свой лисапед. Неужели всегда и везде в Android`е каждый разработчик должен то там, то здесь писать свой лисапед? Ну да ладно, это эмоции.

У меня вопрос по этим самым переключателям.
В базе данных SQLite в таблице, кроме текстовых полей, есть 2 колонки типа Int, там хранится 0 или 1.
Теперь в ListView Item тоже нужно вывести 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.
    class MyViewBinder implements SimpleCursorAdapter.ViewBinder{

        boolean b = false;
        int i;
        CheckBox cb;

        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

            if (columnIndex == 3) {
                cb = (CheckBox) view.findViewById(R.id.checkProductNetwork);// checkProductNetwork - переключатель
                i = cursor.getInt(columnIndex);
                if (i == 1) b = true; else b = false;
                cb.setChecked(b);
                return true;
            }
            if (columnIndex == 6) {
                cb = (CheckBox) view.findViewById(R.id.checkProductCorp);// checkProductCorp - переключатель
                i = cursor.getInt(columnIndex);
                if (i == 1) b = true; else b = false;
                cb.setChecked(b);
                return true;
            }
            return false;
        }
    }



меня волнует вот эти куски кода
columnIndex == 3
и
columnIndex == 6
а если порядок полей поменяется?
как сделать привязку по имени поля?

на сколько я знаю, то findViewById - не самый быстрый метод, может можно заменить?
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38808927
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упростил немного код, убрав лишние переменные

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    class MyViewBinder implements SimpleCursorAdapter.ViewBinder{

        CheckBox cb;

        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

            if (columnIndex == 3) {
                cb = (CheckBox) view.findViewById(R.id.checkProductNetwork);
                cb.setChecked(cursor.getInt(columnIndex) != 0);
                return true;
            }
            if (columnIndex == 6) {
                cb = (CheckBox) view.findViewById(R.id.checkProductCorp);
                cb.setChecked(cursor.getInt(columnIndex) != 0);
                return true;
            }
            return false;
        }
    }
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38808940
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему не сделать так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    class MyViewBinder implements SimpleCursorAdapter.ViewBinder{

        CheckBox cb;

        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            switch (view.getId()){
               case  R.id.Column3: 
                    cb = (CheckBox) view.findViewById(R.id.checkProductNetwork);
                    cb.setChecked(cursor.getInt(columnIndex) != 0);
                    return true;
                case  R.id.Column6:
                    cb = (CheckBox) view.findViewById(R.id.checkProductCorp);
                    cb.setChecked(cursor.getInt(columnIndex) != 0);
                    return true;
            }
            return false;
        }
    }

[/quot]
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38808948
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, можно и так. Сильно от єтого ничего не меняется
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38808986
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,
Есть еще такая технология отображения listview.

http://stackoverflow.com/questions/18162931/get-selected-item-using-checkbox-in-listview
использовал на относительно больших и часто меняющихся списках ( выбор товаров разбитых по группам для заполнения заказа )
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38808987
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11меня волнует вот эти куски кода
columnIndex == 3
и
columnIndex == 6
а если порядок полей поменяется?
как сделать привязку по имени поля?


cursor.getColumnName(int columnIndex)
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38809076
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

для производительности ползания по большим датасетам я использую такую штуку http://habrahabr.ru/post/154931/ только слегка допилив до стандарта, добавив в QuckAdapter
Код: java
1.
2.
3.
4.
5.
@Override
public void notifyDataSetChanged() {
    doQuery();
    super.notifyDataSetChanged();
}


И еще: чтоб не ползать через findbyview используй ViewHolder .

Индекс колонок лучше запоминать при первом открытии базы. Во время работы программы они не поменяются.
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38810086
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandcursor.getColumnName(int columnIndex)

так надо же наоборот - узнать columnIndex по имени поля
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38810139
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanИндекс колонок лучше запоминать при первом открытии базы. Во время работы программы они не поменяются.

И где и как правильно это сделать?
Как вообще получить индекс колонок?
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38810141
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в принципе этот подход неплохой

Код: sql
1.
2.
switch (view.getId()){
               case  R.id.Column3: 



или
Код: sql
1.
if (view.getId() == R.id.checkProductNetwork)
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38810163
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11pandcursor.getColumnName(int columnIndex)

так надо же наоборот - узнать columnIndex по имени поля
Вы доку читали ? Вот Вам наоборот

getColumnIndex(String columnName)

Returns the zero-based index for the given column name, or -1 if the column doesn't exist.
...
Рейтинг: 0 / 0
setViewValue с точки зрения производительности
    #38810167
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pandВы доку читали ?

да
просто под вечер, после работы уже того %)

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


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