各位看官們,大家好,上一回中咱們說的是Android中UI控件之
ListView
擴充的例子,這一回咱們說的例子是UI控件之
ListView
優化。閑話休提,言歸正轉。讓我們一起Talk Android吧!
看官們,我們都知道
ListView
是用來顯示大量資料的控件,如果資料量太大了,效率就會非常的低,是以,我們非常有必要對
ListView
進行相關的優化。下面我們通過代碼結合文字的方式來說明:如何優化
ListView
控件
public class DIYAdapter extends ArrayAdapter<DataType>{
private int itemId;
public DIYAdapter(Context context, int textViewId, List<DataType> dataTypeList){
super(context,textViewId,dataTypeList);
itemId = textViewId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
DataType itemData = getItem(position);
ViewHolder viewHolder;
View view;
//View view = LayoutInflater.from(getContext()).inflate(itemId,parent,false);
if(convertView != null) {
view = convertView;
viewHolder = (ViewHolder)view.getTag();
}else {
view = LayoutInflater.from(getContext()).inflate(itemId,parent,false);
ImageView imageView = (ImageView)view.findViewById(R.id.list_item_image);
TextView textView = (TextView)view.findViewById(R.id.list_item_text);
viewHolder = new ViewHolder(imageView,textView);
view.setTag(viewHolder);
}
viewHolder.mImageView.setImageResource(itemData.getImageId());
viewHolder.mTextView.setText(itemData.getTitle());
// ImageView imageView = (ImageView)view.findViewById(R.id.list_item_image);
// TextView textView = (TextView)view.findViewById(R.id.list_item_text);
// imageView.setImageResource(itemData.getImageId());
// textView.setText(itemData.getTitle());
return view;
}
public class ViewHolder {
private ImageView mImageView;
private TextView mTextView;
public ViewHolder(ImageView img, TextView text){
mImageView = img;
mTextView = text;
}
}
}
看官們,優化的地方主要是擴充卡,大家重點看一下上面的代碼中注釋掉的代碼,這些代碼就是被優化掉的代碼。
-
第一個優化的地方是關于view的
優化前每次都要擷取view,優化後隻有在第一次加載布局時擷取view。那麼如何判斷是第一次加載布局呢?這個取決于
的第二個參數,第一次加載布局的時候它是空的,以後ListView就會把加載好的布局緩沖起來,每次調用getView
方法時,它會把緩沖的布局傳遞給第二個參數。getView
-
優化的第二個地方是關于布局中的控件
優化前我們每次都要去擷取布局中的控件,優化後我們隻需要在第一次加載布局時擷取布局中的控件。這是如何實作的呢?我們使用了緩沖的技術,首先定義了緩沖類
。類中的資料成員需要與布局檔案中的控件相對應。我們在第一次加載布局的時候初始化一個緩沖類對象,并且使用ViewHolder
方法把該對象存放到View中。以後隻需要使用view.setTag()
方法就可以擷取到被緩沖的對象。view.getTag()
看官們,對
ListView
的優化主要使用了緩沖思想,這想可以大提高
ListView
的運作效率,在資料量小的時候可能展現不出來優化的好處,在資料量大的時候就可以展現出來了。是以,希望大家在使用
ListView
的時候能夠進行優化。
各位看官,關于Android中UI控件之
ListView
優化的例子咱們就介紹到這裡,欲知後面還有什麼例子,且聽下回分解!