Android GridView 優化

網上的書架有一個缺陷,就是在重寫適配器的時候沒有判斷convertView==null,當你上下滾動控件時,內存會不斷的猛增,當軟件的內存超過50多M時會導致軟件的崩潰,當你加上convertView==null時,當你上下滾動控件時,你會發現適配器裏面的控件會亂跑。有什麼問題大家都多提提意見,下面就是見證奇蹟的時刻。


準備這樣的一張圖片:book_bg.png
8d71d514gd0533bffd0b9&690
1、創建個MainActivity.java

importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;
importandroid.widget.GridView;

publicclassMainActivityextendsActivity{
List<HashMap<String,String>>list=newArrayList<HashMap<String,String>>();
GridAdaptergrid=null;
GridViewview;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view=(GridView)findViewById(R.id.grid);
for(inti=0;i<52;i++){
HashMap<String,String>map=newHashMap<String,String>();
map.put("values",""+i);
list.add(map);
}
grid=newGridAdapter(MainActivity.this,list);
view.setAdapter(grid);
}

2、創建個GridAdapter.java

importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;

importorg.goodev.squaregrid.R;
importorg.goodev.squaregrid.R.drawable;
importorg.goodev.squaregrid.R.id;
importorg.goodev.squaregrid.R.layout;

importandroid.content.Context;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.TextView;

publicclassGridAdapterextendsBaseAdapter{
List<HashMap<String,String>>list=newArrayList<HashMap<String,String>>();
LayoutInflaterlayoutinflater;

privateContextmContext;
publicGridAdapter(Contextcontext,List<HashMap<String,String>>data){
list=data;
mContext=context;
}

publicintgetCount(){
returnlist.size();
}
@Override
publicObjectgetItem(intposition){
returnposition;
}

@Override
publiclonggetItemId(intposition){
returnposition;
}

@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
ViewHolderviewHolder;
if(convertView==null)
{
convertView=layoutinflater.from(mContext).inflate(R.layout.item,null);
viewHolder=newViewHolder();
viewHolder.linear=(LinearLayout)convertView.findViewById(R.id.LinearLayout_index1);
viewHolder.p_w_picpath=(ImageView)convertView.findViewById(R.id.icon);
convertView.setTag(viewHolder);
}else
{
viewHolder=(ViewHolder)convertView.getTag();
}

if(position%4==0){
viewHolder.linear.setBackgroundResource(R.drawable.left);
}elseif(position%4==3){
viewHolder.linear.setBackgroundResource(R.drawable.right);
}else{
viewHolder.linear.setBackgroundResource(R.drawable.center);
}

returnconvertView;

}

classViewHolder
{
publicLinearLayoutlinear;
publicImageViewp_w_picpath;
}

}

最後面注意的是:在AndroidManifest.xml聲明下你的最低版本和最高版本<uses-sdk
android:minSdkVersion="12"(這是我的最低版本)
android:targetSdkVersion="17"(這是指定的最高版本)/>
如果把android:targetSdkVersion="17"給刪掉的話,GridView滑動就會很卡,不信可以試下。
再再最後<application/>裏面添加硬件加速:android:hardwareAccelerated="true"。
保證你這是個質的飛躍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章