避免在 getView 中有 反覆調用的 findViewById findViewById 的實現是遍歷。假設你定義的 View 越複雜代價越大。 Google 推薦的作法是用 ViewHolder,而後保存在 view 的 tag 中。現在 RecyclerView 也是強制使用 ViewHolder 了。 java
findViewById因爲Adapter中的getView方法運行好屢次,因此需要優化,,那麼典型的優化是是使用ViewHolder一說這個詞你應該知道是如何優化(不會的問百度)
@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在高速滑動的時候中止載入圖片,有空補充.
ide