0

Это моя функция, которая будет извлекать 1300 записей из базы данных SQLite и нарисовать серию текстовых представлений внутри макета таблицы. Но когда эта функция начинает выполнение полного приложения, он не отвечает в течение некоторого времени. Разметка таблицы снова находится в представлении прокрутки.Android динамически составляет более 1000 текстовых просмотров, что приводит к тому, что приложение полностью не отвечает

В основном я хочу, чтобы загрузить в обратно ground.so, что остальные приложения по-прежнему реагирует

public void LoadAlarmNotifications() { 

    int SerNo = 0 ; 
    TextView SerNoTxtVw; 
    TextView AlarmTxtVw; 
    TextView TimeOccuredTxtVw; 
    TextView UploadTxtTxtVw; 
    Notificationtablelayout.setGravity(Gravity.CENTER); 

    pastEvent_tbleList = oDatabaseHandler.FetchPastEventDetails(sDiagnosisID); 

    if(pastEvent_tbleList != null) 
     { 
      for(Pastevents_tble PEvents_tble: pastEvent_tbleList) 
      { 
        final TableRow row = new TableRow(this.getApplicationContext()); 
        nAlarmType   = PEvents_tble.GetAlarmID(); 
        nRowID    = PEvents_tble.GetEventNo(); 
        SerNo    = PEvents_tble.GetEventNo(); 
        SetAlarmType(nAlarmType); // Set Alarm 
        tAlarmTime   = PEvents_tble.GetStrtTime(); 
        sUploadStatus  = PEvents_tble.GetUploadStatus(); 
        row.setId(nRowID); 

        SerNoTxtVw  =new TextView(this.getApplicationContext()); 
        AlarmTxtVw  =new TextView(this.getApplicationContext()); 
        TimeOccuredTxtVw=new TextView(this.getApplicationContext()); 
        UploadTxtTxtVw =new TextView(this.getApplicationContext()); 

        SerNoTxtVw.setText(Integer.toString(SerNo)); 
        SerNoTxtVw.setWidth(80); 
        SerNoTxtVw.setHeight(40); 
        SerNoTxtVw.setGravity(Gravity.CENTER); 
        SerNoTxtVw.setPadding(2, 2,2,2); 
        SerNoTxtVw.setTextColor(Color.parseColor("#FFAADDFF")); 
        row.addView(SerNoTxtVw); 

        AlarmTxtVw.setText(sAlarmName); 
        AlarmTxtVw.setWidth(100); 
        AlarmTxtVw.setHeight(40); 
        AlarmTxtVw.setGravity(Gravity.LEFT); 
        AlarmTxtVw.setPadding(2,2,2,2); 
        // AlarmTxtVw.setBackgroundColor(Color.LTGRAY); 
        row.addView(AlarmTxtVw); 

        TimeOccuredTxtVw.setText(tAlarmTime); 
        TimeOccuredTxtVw.setWidth(140); 
        TimeOccuredTxtVw.setHeight(40); 
        TimeOccuredTxtVw.setGravity(Gravity.CENTER); 
        TimeOccuredTxtVw.setPadding(2,2,2,2); 
        // TimeOccuredTxtVw.setBackgroundColor(Color.LTGRAY); 
        row.addView(TimeOccuredTxtVw); 

        UploadTxtTxtVw.setText(sUploadStatus); 
        if(sUploadStatus.equals("Y")){ 
         UploadTxtTxtVw.setText("✔"); 
         UploadTxtTxtVw.setTextColor(Color.parseColor("#FF00FF00")); 
        } 
        else if(sUploadStatus.equals("N")){ 
         UploadTxtTxtVw.setText("X"); 
         UploadTxtTxtVw.setTextColor(Color.parseColor("#FFFF0000")); 
         }else 
         { 
         UploadTxtTxtVw.setText("✔"); 
         UploadTxtTxtVw.setTextColor(Color.parseColor("#FFAADDFF")); 
         } 

        UploadTxtTxtVw.setWidth(100); 
        UploadTxtTxtVw.setHeight(40); 
        UploadTxtTxtVw.setGravity(Gravity.CENTER); 
        UploadTxtTxtVw.setPadding(2,2,2,2); 
        // UploadTxtTxtVw.setBackgroundColor(Color.LTGRAY); 
        row.addView(UploadTxtTxtVw); 

        Notificationtablelayout.addView(row); 


        nProgressCounter++; 

        row.setOnClickListener(new OnClickListener() { 

       @Override 
        public void onClick(final View SelectedRowVw) { 
          if(!bSwitchPopOpen) 
          { 

          } 

        }); 
      } 

      LoadingTxtView.setVisibility(View.GONE); 
      bEpisodeLoad = true; 
     } else 
     { 
      bEpisodeLoad = true; 
      LoadingTxtView.setText("No Snapshot available..."); 

     } 
} 

размер pastEvent_tbleList является 1335. Любая идея, как оптимизировать это. Вместо текстового представления есть ли какой-либо другой контроль света?

+0

Смелее с асинхронной задачей, загрузить данные с помощью задачи асинхронной и когда данные загружается обновление представления, вы можете найти множество образцов по сети –

+1

, относящихся к заголовку сообщения ... это не рендеринг в андроиде 1000+ textview, это скорее ВЫ сбой приложения ... как насчет какой-то реализации поискового вызова? – Leo

+0

Почему бы вам не использовать listview с адаптером класса адаптера –

ответ

3

Для этого необходимо использовать шаблон Loader, чтобы вы загружали только контент, который пользователь действительно увидит, и вы также должны повторно использовать текстовые представления на экране. Это то, что было создано ListView/CursorLoader, поэтому вы действительно должны повторно использовать эти компоненты, если это вообще возможно.

+0

Любой пример на этом будет очень полезен – Tejas

+0

Нужно ли мне отображать список в списке, прокручивать View? – Tejas

+0

Нет, вам не нужно класть его в ScrollView. –

1

Вы должны использовать ListView, потому что он загружает видимую область поэтому приложение не прекратит делать расчеты, и вы можете перемещаться вверх и вниз и увидеть ваши texviews

Смежные вопросы