Пользовательский список Android загружается очень медленно

1

Создал пользовательский просмотр списка, включающий изображение, два текстовых вида и флажок. Я могу определить флажок, который будет проверен/снят, но проблема с этим дизайном очень медленная прокрутка. Будет ли это быстрее, если я проведу его в реальном устройстве.

public class ListViewActivity extends ListActivity {

 protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    ArrayAdapter<Model> compositeAdapter = new CompositeAdapter(this,
            getModel());
    setListAdapter(compositeAdapter);
    ListView lv = getListView();
    lv.setFastScrollEnabled(true);
   }
}

private class CompositeAdapter extends ArrayAdapter<Model> {
    private final List<Model> list;
    private final Activity context;

    public CompositeAdapter(Activity context, List<Model> list) {
        super(context, R.layout.listviewactivitylayout, list);
        this.context = context;
        this.list = list;
    }

    private class ViewHolder{
        protected TextView textView1;
        protected TextView textView2;
        protected ImageView imageView;
        protected CheckBox ckBox;
    }
    public View getView (int position, View convertView, ViewGroup parent) {
        View view = null;
        final ViewHolder vh;
        if(convertView==null){
            LayoutInflater li = context.getLayoutInflater();
            view = li.inflate(R.layout.listviewactivitylayout, null);
             vh = new ViewHolder();
            vh.ckBox =(CheckBox) view.findViewById(R.id.list_view_layout_checkbox);
            vh.imageView = (ImageView) view.findViewById(R.id.listView_image_view);
            vh.textView1 = (TextView)view.findViewById(R.id.list_view_layout_text_view1);
            vh.textView2= (TextView)view.findViewById(R.id.list_view_text_view2);
            view.setTag(vh);
        }
        else{
            view= convertView;
            vh = (ViewHolder)view.getTag();
        }

/**
** sending text and images to the each of the list view
**
*/
  • 0
    Вы тестируете это в эмуляторе или на телефоне? По моему опыту, эмулятор работает очень медленно, поэтому, если вы используете эмулятор, с вашим кодом вообще может быть что-то не так.
  • 0
    Разместите свой код. Без этого сложно сказать что не так ..
Показать ещё 2 комментария
Теги:
android-emulator
listview

1 ответ

4
Лучший ответ

Вы загружаете изображения. который нужно обрабатывать в отдельном потоке и просто помещать в изображениеView, когда он декодируется.

вот отличный проект, который поможет вам в этом. Ленивые загрузки изображений

РЕДАКТИРОВАТЬ

взглянув на ваш код, есть несколько вещей, которые я замечаю:

Во-первых: нет места, которое вы присваиваете картине. (для этого используйте ленивый адаптер для загрузки)

Во-вторых: выбор флажка будет запутан. вам нужно следить за проверенной позицией с состоянием и перерисовывать в getView (hashmap или даже лучше разреженный массив для этого)

В-третьих, чтобы избавиться от вспомогательного представления, которое вы используете. вам это не нужно. (это рынок, как View view в вашем коде).

Итак, если convertView==null просто используйте convertView=inflate... и верните его в конец.

И Четвертый как полезный совет: переместите класс адаптера в новый Java файл класса. вы уже сохраняете ссылку на активность и список, вы можете уменьшить количество кода в своей деятельности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню