ListView是Android用于将一个完整的对象数据进行界面显示的控件。当对象的数据量很大时,就需要对其进行优化即对他的适配器Adapter进行优化。
优化方法一(加载布局优化)
ListView每次滑动都会调用getView方法,该方法里面有一个View参数也就是convertView,并且ListView每次滑动都会进行布局加载,当数据量比较大时就会出现卡顿,所以需要对convertView进行判断,当convertView为空时加载一次布局不为空直接使用
View view;
if(convertView == null){
view = LayoutInfalter.from(getContext()).inflate(resourceID,null)
}
else{
view = convertView
}
优化方法二(加载控件优化)
内部类ViewHolder优化,该方法与convertView对象存在关联,该内部类主要进行对控件的ID进行存储,以省略每次对控件ID的查找
ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
viewHolder.test_image = (ImageView)convertView.findViewById (R.id.test_image);
convertView.setTage(viewHolder);
}else{
viewHolder.converView.getTag();
}
内部类:
class ViewHolder{
ImageView test_image;
}
一个完整Adapte类
其中红色部分为布局,自己创建即可,这里就不多说了。
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nova.projectintergration.R; import java.util.List; /** * Created by Li on 2018/12/19. */ public class TestAdapter extends BaseAdapter{ ViewHolder mViewHolder; private List<Object> datas; Context mContext; public TestAdapter(Context context,List<Object>datas){ this.datas = datas; this.mContext = context; } @Override public int getCount() { return datas==null?0:datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_layout,parent,false);; mViewHolder=new ViewHolder(); mViewHolder.mTxTitle=(TextView)convertView.findViewById(R.id.item_tx_title); convertView.setTag(mViewHolder); }else { mViewHolder=(ViewHolder)convertView.getTag(); } //mViewHolder.mTxTitle.setText(datas.get(position).xxx); return convertView; } class ViewHolder{ TextView mTxTitle; } }