Android自定义列表加载速度非常慢

时间:2011-07-02 17:29:01

标签: android listview android-emulator

制作自定义列表视图,其中包含图像,两个文本视图和一个复选框。我可以识别正在选中/取消选中的复选框,但此设计的问题是滚动速度非常慢。如果我将它测试到真实设备中,这会变快吗。

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 个答案:

答案 0 :(得分:4)

您正在加载图片。需要在单独的线程中处理,并在解码时放在imageView上。

这是一个很好的项目,可以帮助你做到这一点。 Lazy load images

修改

通过查看您的代码,我注意到了一些事情:

首先:你没有任何地方可以拍照。 (使用延迟加载适配器)

第二:您的复选框选项会搞砸。你需要用状态跟踪检查的位置,并在getView中重绘(hashmap或更好的稀疏数组)

第三个是摆脱您正在使用的帮助器视图。你不需要它。 (它在您的代码中作为View view市场。)

因此,如果convertView==null只使用convertView=inflate...并在最后返回该{{1}}。

第四作为一个有用的提示:将适配器类移动到新的类java文件。您已经保留了活动参考和列表,您可以减少活动中的代码量。