Таблица - слишком долгое создание
Таблица - слишком долгое создание
Есть tableLayout таблица динамическая ее размеры меняются в зависимости от выбора пользователя.
Есть один момент - например строк в таблице 16
Столбцов - 8
Каждая ячейка это layout из трех текстовых полей TextView
Так вот генерация этой таблицы происхолит омерзительно долго. И суть тут даже не в данных - для теста я заполнял ее одинаковыми данными.
Что так тяжело работает? Inflate или getViewbyid и можно ли это обойти как нибуть, например просто клонируя .clone() созданный элемент таблицы через inflate. Или все настолько плохо с графикой в Андроиде?
Есть один момент - например строк в таблице 16
Столбцов - 8
Каждая ячейка это layout из трех текстовых полей TextView
Так вот генерация этой таблицы происхолит омерзительно долго. И суть тут даже не в данных - для теста я заполнял ее одинаковыми данными.
Что так тяжело работает? Inflate или getViewbyid и можно ли это обойти как нибуть, например просто клонируя .clone() созданный элемент таблицы через inflate. Или все настолько плохо с графикой в Андроиде?
Re: Таблица - слишком долгое создание
нетalu писал(а):Или все настолько плохо с графикой в Андроиде?
Показывай код, кто ж его знает какую архитектуру ты там построил.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Таблица - слишком долгое создание
вот лейаут элемента таблицыrezak90 писал(а):нетalu писал(а):Или все настолько плохо с графикой в Андроиде?
Показывай код, кто ж его знает какую архитектуру ты там построил.
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="58dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/textGrid111"
android:layout_width="25dp"
android:layout_height="30dp"
android:textColor="#000000"
android:textSize="19sp"
android:maxLines="1"
android:singleLine="true"
android:maxWidth="230dp"
android:editable="false"
android:phoneNumber="true"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:gravity="center_vertical|right"
android:layout_marginLeft="6dp"
>
</TextView>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="2dp">
<TextView
android:id="@+id/textGrid222"
android:layout_width="25dp"
android:layout_height="15dp"
android:textColor="#399ae3"
android:textSize="13sp"
android:maxLines="1"
android:singleLine="true"
android:maxWidth="230dp"
android:editable="false"
android:textStyle="bold"
android:gravity="left|top"
>
</TextView>
<TextView
android:id="@+id/textGrid333"
android:layout_width="25dp"
android:layout_height="15dp"
android:textColor="#f35a19"
android:textSize="13sp"
android:maxLines="1"
android:singleLine="true"
android:maxWidth="230dp"
android:editable="false"
android:textStyle="bold"
android:gravity="center_vertical|left"
>
</TextView>
</LinearLayout>
</LinearLayout>Перед этим в таблице все удаляется - tableView.removeAllViews();
вызывается в цикле (в моем случае 17 раз. Столбцов в таблице как я говорил выше 8)
dif - класс с 2-мя полями (int) newValue и (int) oldValue
Код: Выделить всё
public void addRow(String s,ArrayList<dif> ar){
TableRow tr=new TableRow(this);
tr.setGravity(Gravity.CENTER_VERTICAL);
int w=tableView.getChildCount();
if(w%2==0){
tr.setBackgroundColor(0xFFdfdfdf);
}
TextView tv=null;
int i;
int di;
View vw=null;
//Этот цикл выполняется 8 раз в примере про который я говорю
for(i=0;i<ar.size();i++){// todo very very slow, why?
vw=ltInflater.inflate(R.layout.my_grid_item, null, false);
vw.setOnClickListener(for_graph);
vw.setTag(ar.get(i));
tv=(TextView)vw.findViewById(R.id.textGrid111);
tv.setText(Integer.toString(ar.get(i).newValue));
di=ar.get(i).oldValue-ar.get(i).newValue;
if(ar.get(i).oldValue<1){di=0;}
if(ar.get(i).newValue<1){di=0;}
if(di>0){
((TextView)vw.findViewById(R.id.textGrid222)).setText("+"+Integer.toString(di));
}
if(di<0){
((TextView)vw.findViewById(R.id.textGrid333)).setText(Integer.toString(di));
}
tr.addView(vw);
}
tableView.addView(tr); // Это в TableLayout добавляется строка
}Задержка создания где-то одна-полторы секунды. (Может это нормально для Андроида конечно, но я сомневаюсь)
Re: Таблица - слишком долгое создание
мда... читабельность кода зашкаливает)))
Конечно сделано всё руками, конечно операция addView не лёгкая, findViewById здесь не критична, так же не умеем/знаем как работает ArrayList, каждый раз view создаются.
Я бы посоветовал переписать всё под GridView со своим адаптером. И нет, то что ты написал в андроиде не нормально =)
Конечно сделано всё руками, конечно операция addView не лёгкая, findViewById здесь не критична, так же не умеем/знаем как работает ArrayList, каждый раз view создаются.
Я бы посоветовал переписать всё под GridView со своим адаптером. И нет, то что ты написал в андроиде не нормально =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Таблица - слишком долгое создание
Про читабельность согласен, но пока это еще не важно.rezak90 писал(а):мда... читабельность кода зашкаливает)))
Конечно сделано всё руками, конечно операция addView не лёгкая, findViewById здесь не критична, так же не умеем/знаем как работает ArrayList, каждый раз view создаются.
Я бы посоветовал переписать всё под GridView со своим адаптером. И нет, то что ты написал в андроиде не нормально =)
"так же не умеем/знаем как работает ArrayList"
тут по-подробней.. Что имелось ввиду?
Re: Таблица - слишком долгое создание
то что всё время идёт обращение к коллекции, а гораздо быстрее было бы получить экземпляр нужного элемента и обращаться к нему на прямую, коллекция всего на из 8 элементов, но всё таки пару микросекунд это сократило бы =)alu писал(а):"так же не умеем/знаем как работает ArrayList"
тут по-подробней.. Что имелось ввиду?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Таблица - слишком долгое создание
Ок. Повторяющиеся расчеты из цикла вынесу.rezak90 писал(а):то что всё время идёт обращение к коллекции, а гораздо быстрее было бы получить экземпляр нужного элемента и обращаться к нему на прямую, коллекция всего на из 8 элементов, но всё таки пару микросекунд это сократило бы =)alu писал(а):"так же не умеем/знаем как работает ArrayList"
тут по-подробней.. Что имелось ввиду?
Я так и делаю в других местах, это был так сказать первый опыт.