Пользовательский список Android загружается очень медленно - PullRequest
1 голос
/ 02 июля 2011

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

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
**
*/

1 Ответ

4 голосов
/ 02 июля 2011

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

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

EDIT

глядя на ваш код, я заметил несколько вещей:

Первое: Нет места, в котором вы присваиваете изображение. (используйте для этого ленивый загрузочный адаптер)

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...