制作自定义列表视图,其中包含图像,两个文本视图和一个复选框。我可以识别正在选中/取消选中的复选框,但此设计的问题是滚动速度非常慢。如果我将它测试到真实设备中,这会变快吗。
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 :(得分:4)
您正在加载图片。需要在单独的线程中处理,并在解码时放在imageView上。
这是一个很好的项目,可以帮助你做到这一点。 Lazy load images
修改强>
通过查看您的代码,我注意到了一些事情:
首先:你没有任何地方可以拍照。 (使用延迟加载适配器)
第二:您的复选框选项会搞砸。你需要用状态跟踪检查的位置,并在getView中重绘(hashmap或更好的稀疏数组)
第三个是摆脱您正在使用的帮助器视图。你不需要它。 (它在您的代码中作为View view
市场。)
因此,如果convertView==null
只使用convertView=inflate...
并在最后返回该{{1}}。
第四作为一个有用的提示:将适配器类移动到新的类java文件。您已经保留了活动参考和列表,您可以减少活动中的代码量。