ListView中的item中的Onclick事件的优化
- ListView的Adapter的优化布局载入器的载入次数最典型的使用方法是使用convertView进行优化,让convertView当做布局载入器的载体,也就是.重用 convertView
用以避免反复创建 View。反复创建 View 代价较大,并且假设重用 view 不改变宽高,重用View能够降低又一次分配缓存造成的内存频繁分配/回收; - convertView = LayoutInflater.from(context).inflate(R.layout.子布局, null)
-
避免在 getView 中有 反复调用的 findViewById findViewById 的实现是遍历。假设你定义的 View 越复杂代价越大。 Google 推荐的做法是用 ViewHolder,然后保存在 view 的 tag 中。
如今 RecyclerView 也是强制使用 ViewHolder 了。
findViewById由于Adapter中的getView方法运行好多次,所以须要优化,,那么典型的优化是是使用ViewHolder一说这个词你应该知道是如何优化(不会的问百度)
- 就是优化item中的点击事件,
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LinearLayout.inflate(R.layout.vlist, null); holder.title = (TextView) convertView.findViewById(R.id.title); holder.info = (TextView) convertView.findViewById(R.id.info); holder.viewBtn = (Button) convertView.findViewById(R.id.view_btn); //使用convertView复用点击事件 holder.title.setOnClickListener(holder); holder.info.setOnClickListener(holder); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //使用传递參数的形式给点击事件设置内容. //须要的话,就用addLIst传递过去须要的參数. holder.addList(position,context); holder.title.setText((String) mData.get(position).get("title")); holder.info.setText((String) mData.get(position).get("info")); return convertView; } } //提取出来方便点 final class ViewHolder implements View.OnClickListener { public TextView title; public TextView info; public Button viewBtn; int mPosition; Context context; public void addList(int inPosition,Context context) { mPosition = inPosition; this.context = context; } @Override public void onClick(View v) { //写入item中的点击事件 //... //v.getTag(); switch (v.getId()){ case R.id.title: Toast.makeText(context, "点击了title----"+mPosition, Toast.LENGTH_SHORT).show(); break; case R.id.info: Toast.makeText(context, "点击了info====>>"+mPosition, Toast.LENGTH_SHORT).show(); break; } } }
5.这样也就避免的在getView中进行耗时操作有空在更,,菜鸟欢迎指点,一起探讨listView的优化,,
6.就是让ListView在高速滑动的时候停止载入图片,有空补充.